hmk run dev

WHERE 절에 컬럼(nullable) 조건주기 본문

mysql

WHERE 절에 컬럼(nullable) 조건주기

hmk run dev 2022. 2. 15. 11:41

데이터 조회 시 JOIN이 들어가는 쿼리일 경우엔

특정 레코드엔 NULL인 칼럼이 들어가는 경우가 빈번하다.

 

이럴 때 특정 레코드의 칼럼이 NULL인 경우 WHERE 조건을 사용하지 않고 싶을 때 아래처럼 구현하면 된다.

 

SELECT * FROM w_schedule ws
LEFT OUTER JOIN w_work w
WHERE 1=1
AND ((w.wait_yn IS NULL and 1=1 ) or (w.work_stat IS NOT NULL and w.wait_yn = 'N'))

위의 코드처럼 w_work가 조인돼서 생기는 필드인 w.wait이 IS NOT NULL인 경우에 한해 

 w.wait_yn = 'N' 조건을 걸어준다.

 

FROM w_alliance_work waw
LEFT OUTER JOIN w_work ww ON (waw.work_no = ww.work_no) 
LEFT OUTER JOIN w_work_estimate we ON (we.work_no = ww.work_no)
LEFT OUTER JOIN (SELECT work_no, admin_no, st_date_h, st_date_m, st_date_ymd, concat(st_date_ymd,st_date_h,st_date_m) AS st_datetime FROM w_admin_schedule was  where was.schedule_type = '02' GROUP BY work_no) was ON (was.work_no = waw.work_no)
LEFT OUTER JOIN (SELECT code_name, code_value from w_code where code_gb = 'new_work_stat' ) wcd on wcd.code_value = ww.work_stat
LEFT OUTER JOIN (SELECT code_name, code_value from w_code where code_gb = 'alliance_work_stat' ) cd on cd.code_value = waw.alliance_work_stat
WHERE ((ww.delete_yn IS NULL AND 1=1) or (ww.delete_yn IS NOT NULL and ww.delete_yn != 'Y' )) // delete_yn이 NULL이 아닌 것중에 값이 'Y'가 아닌 것 출력 조건
ORDER BY waw.create_date DESC;

delete_yn이 NULL이 아닌 것중에 값이 'Y'가 아닌 것 출력 조건

Comments