현재 db의 owner 조건 5개와 table_name조건 4개 cooment is null인것으로 조회를 하려는데, 조회 결과 is null조건이 안먹히는지 null이 아닌 것도 나오는 현상이 발생합니다. 혹시 아래의 쿼리가 문제가 있는지 여쭙을 수 있을까요??
SELECT
*
FROM
ALL_COL_COMMENTS
WHERE
OWNER = 'parameter1'
OR OWNER = 'parameter2'
OR OWNER = 'parameter3'
OR OWNER = 'parameter4'
OR OWNER = 'parameter5'
AND TABLE_NAME NOT LIKE '%parameter6%'
AND TABLE_NAME NOT LIKE '%parameter7%'
AND TABLE_NAME NOT LIKE '%parameter8%'
AND TABLE_NAME NOT LIKE '%parameter9%'
AND COMMENTS IS NULL
ORDER BY COLUMN_NAME;
SELECT
*
FROM
ALL_COL_COMMENTS
WHERE
(OWNER = 'parameter1'
OR OWNER = 'parameter2'
OR OWNER = 'parameter3'
OR OWNER = 'parameter4'
OR OWNER = 'parameter5'
)
AND TABLE_NAME NOT LIKE '%parameter6%'
AND TABLE_NAME NOT LIKE '%parameter7%'
AND TABLE_NAME NOT LIKE '%parameter8%'
AND TABLE_NAME NOT LIKE '%parameter9%'
AND COMMENTS IS NULL
ORDER BY COLUMN_NAME;
or 조건을 다른 조건과 별개로 묶어서 써야 할듯 싶습니다....
원래대로의 조건문에서는 단적으로 아래와 같이
comments is null
or owner = 'parameter'
같은 형태의 조건문이 되어 버리겠네요.
(컬럼 조건문이 이런식으로 해석이 될 수 있다... 를 보여주기 위한 한 예로 저 두 조건문을 추출했습니다.)
생각하지 못한 방향으로 해석해버리는군요.... 조인을 통해 별도로 조건을 주는 방향으로 해결해보겠습니다ㅎㅎ 감사합니다!!!
1. OR 조건은
- 괄호로 묶어줘야 합니다.
- IN 으로 변경하면 간결합니다.
2. 정렬기준은
- 컬럼명만 가지고 하기 보다는 앞에 오너가 있어야 할 것 같습니다.
- COLUMN_NAME 보다는 COLUMN_ID 가 더 적당할 듯 합니다.
말씀 하신 대로 괄호 처리 및 IN 활용하니 훨씬 깔끔해지고 self JOIN으로 처리 할 때 보다 속도도 빠르네요.... 감사합니다!!! ㅎㅎ
그런데 추가로 정렬 기준에 COLUMN_ID는 "all_tab_columns"로 조회가 가능한 것으로 확인되는데 일부러 조인하여서 활용 하는게 더 낫다고 판단해 주신 건가요??
아! column_id 를 사용하려면 조인이 필요하겟네요.