SQL 쿼리 질문: 선택 ... 아닌
뭔가 어리석은 실수를 하고 있는 것은 분명하지만, 도대체 무슨 실수인지 알 수가 없습니다:
SQL Server 2005에서 오전 2시 이전에 예약한 고객을 제외한 모든 고객을 선택하려고 합니다.
이 쿼리를 실행하면
SELECT idCustomer FROM reservations
WHERE idCustomer NOT IN
(SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2)
결과가 0개입니다.
하지만
SELECT idCustomer FROM reservations
는 152.000개의 결과와 'NOT IN' 부분을 반환합니다:
SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2
는 284개 행만 반환합니다.
38
7
목록 매개변수에 널 값이 포함되어 있지 않은지 확인하세요.
여기에 설명이 있습니다:
와 동일합니다:
(*) 편집: 이 설명은 꽤 훌륭하지만, 향후의 오해의 소지를 없애기 위해 한 가지를 언급하고 싶습니다. (TRUE 또는 NULL)은 TRUE로 평가됩니다. 예를 들어 field1 = 3인 경우에 해당됩니다. 이 TRUE 값은 FALSE로 부정되고 행이 필터링됩니다.
39 의 it& 항상 가질 수 있는 '에서' NULL '위험한' 목록 - 흔히 '에서' 가 아닌 '없음' 것으로 매개변수처럼 작동합니다.
SQL 2005를 사용하는 경우 다음을 시도해 볼 수도 있습니다. 오라클의 MINUS 명령과 유사합니다(UNION과 반대).
하지만 디버그를 위해 DATEPART(시간, insertDate) 열을 추가하는 것도 좋습니다.
39 점, 하지만 정말 I& 경우, ve 누락했습니다 wouldn& # 39, t, s # 39 의 다음 책임질래 그리웠댔지 it& İç?
[업데이트: 원래 게시자의 주요 문제였던 idCustomer가 NULL인 경우 처리하는 추가 기준을 추가했습니다.]