전체 검색 질문... 0 10 1,998

by yozm0213 [SQL Query] [2013.04.23 09:02:42]



쿼리를 수정하려다가 막혀서 질문 올립니다.

현재 검색을 하는 쿼리를 수정하고 있는데요.

예를 들면 기존에는 부서명, 이름, 전화번호 만으로 조건검색을 하였습니다.

그런데 여기서 전체 검색을 하나 추가하여 전체검색으로 하면 검색하는 값을 가지고

부서에서도 셀렉트 해오고 이름과 전화번호에서도 셀렉트해서 일치하는 값이 있다면

해당하는 데이터를 모두 셀렉트해오는 것입니다.

그래서 where절에서 or조건을 쓰려고 했더니 테이블이 아웃터조인으로 연결되어 있어 사용을 할 수가 없습니다.

어차피 기존검색은 그대로 두고 if문으로 전체검색과 부분검색을 구분하려고 하는데 위에서 언급한 조건을

주려면 어떻게 해야하는지 궁금하네요...

---------------------------------------------------------------------------------------------------------------------------------------------------------------

by 우리집아찌 [2013.04.23 09:04:43]

테이블 정보와 원하는 결과값을 같이 써주시면 여기 계신분들이 도움주시기 편합니다.

by 부쉬맨 [2013.04.23 09:20:20]
sql 부분은 전체 쿼리가존재

if 조건이 걸리면 해당 조건저리 걸림

그리하여 조건절로인하여 전체검색 부분검색...

if 조건 = 결과 then 
조건절 

sql + 조건절

형태로 코딩해야되지않을까요?


by yozm0213 [2013.04.23 09:50:00]

말씀해주신대로 IF절로 전체검색과  부분검색을 나누면 되는데
아웃터 조인에서 OR조건을 사용하지 못하니 AND조건을 사용하는데
AND조건으로 처리시 전체검색에 조건에 NULL값이 들어가면 나머지
값이 검샏되더라도 데이터를 셀렉트 해오지 못하는 문제가 발생합니다.
이부분을 어떻게 처리해야 될지 몰라 질문을 올렸습니다..
혹시 SQL+조건절이 이 부분에 해당되는건가요? 이부분은 잘 이해를 못하겠어서요..

예를들면 현재는 이렇게 부분검색만 하고 있는데
위에 문제를 해결하면서 전체 조건을 추가할 수 있는 방법을 모르겠네요...


by 아발란체 [2013.04.23 10:26:14]

@.@)ㆀ USER가 예약어 인데 테이블이 만들어지나용? ㅋ
그리고 위 댓글 쿼리가 이상한데요... >ㅅ<)/
조회하는 것은 다 T1.* 있는 것으로 조회를 하면서 OUTER LEFT 조인을.....
그리고 저도 아찌님 말씀처럼 원하시는 결과가 이해가 안되네요...
핑퐁식으로 늦은 결과를 얻는게 아니시라면 단서를 좀 더 주심이~~ !! ^.^
정말 IF문을 써야 하는지, 아님 쿼리로 바로 될 수 있는지 알 수 있을 것 같습니다.


by 아발란체 [2013.04.23 10:30:16]

그리고 자바 구문을 사용하신다면

if(("".equals("userName") == false) {
밑줄친 부분에 대해 명시적으로 기술 하신 것은 좋은데

if(("".equals("userName") == false) {
요기 밑줄친 부분은 무조건 false 밖에 안나오게 되는데....

그리고 문자열 비교는 null 예외 처리를 해주시는 것이 좋습니다.
if(userName != null && userName.equals("") == false) {
}


by yozm0213 [2013.04.23 10:48:11]
예제는 딱히 생각 나는게 없어서 임의로 작성한 것이기 때문에 네임명은 상관하지 않으시고 보셨으면 되는거였네요. 아웃터조인은 제가 빨리 적느라 실수한것 같네요. 아무튼 예제를 그냥 적느라 오류투성이네요.
정리를 하면 기존 조건검색쿼리는 그대로 두고 전체 검색시 기존의 조건검색 쿼리를 전부 태우고 검색을 해야합니다. 그런대 and 조건으로 검색하게 되면 그 중에 하나라도 null값이 나오면 값을 셀렉트하지 못하는 문제가 발생하는데 어떤 방법으로 이것을 해결해야 하는지 마땅한 방법이 떠오르지 않아 질문드렸습니다.

by 디케이 [2013.04.23 10:54:47]
전체조건의미를 정확히 모르겠네요.
일단 두가지로 파악해봤습니다.

1. 전체선택시 이름,부서명,전화번호 각각 조회후 OR조건처리
    : 이름, 부서명, 전화번호 모두 미입력시 조회결과 0건이된다.
WHERE T1.USER_ID = T2.USER_ID(+)
 if( isALL ) { --전체조건시
  AND ( 1=2
  if( userName != "" ){
   OR T1.USER_NAME = :USER_NAME
  }
  if( deptName != "" ){
   OR T1.DEPT_NAME = :DEPT_NAME
  }
  if( tel != "" ){
   OR T1.TEL= :TEL
  }
   )
    }
    else {
    --전체조건이 아닌경우로 기존조건대로 처리해준다.
}

2. 전체선택시 조회조건과 관계없이 모두조회
    : 전체가 아닌경우만 조건처리
WHERE T1.USER_ID = T2.USER_ID(+)
 if( !isALL ) {
  --전체조건 아닌경우만 조회조건을 처리한다.
  if( userName != "" ){
   AND T1.USER_NAME = :USER_NAME
  }
  if( deptName != "" ){
   AND T1.DEPT_NAME = :DEPT_NAME
  }
  if( tel != "" ){
   AND T1.TEL= :TEL
  }
    }

by yozm0213 [2013.04.23 11:05:32]

1번이 제가 말한 것과 맞네요. 어차피 전체검색으로 받아오는 값은 하나이니 isAll처리만 하고 안에 if문은 필요없을 것 같구요. 근데 아웃터조인에서는 OR조건을 사용할 수가 없어서 이부분을 어떻게
처리해야되는지 질문을 드린겁니다..ㅠ


by 디케이 [2013.04.23 11:09:17]
괄호로 감싸면 될텐데요

AND ( 1=2
  -- 요 안에 OR 조건들 나열
  )

by yozm0213 [2013.04.23 11:17:02]
아 그러네요..이렇게 간단한걸...감사합니다.해결됐습니다^^
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입