SQL 쿼리 질문: SELECT... 입력
나는 분명히 어리석은 실수를 하고 있지만 무엇인지 알 수 없습니다.
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개 행만 반환합니다.
SELECT distinct idCustomer FROM reservations
WHERE DATEPART ( hour, insertDate) < 2
and idCustomer is not null
목록 매개 변수에 null 값이 포함되어 있지 않은지 확인합니다.
다음은 설명입니다.
WHERE field1 NOT IN (1, 2, 3, null)
다음과 같습니다.
WHERE NOT (field1 = 1 OR field1 = 2 OR field1 = 3 OR field1 = null)
- 그 마지막 비교는 무효로 평가됩니다.
- 이 null은 나머지 부울식과 함께 OR이 되어 null을 생성합니다. (*)
- null이 거부되어 null이 생성됩니다.
- null은 true가 아닙니다. 여기서 절은 실제 행만 유지하므로 모든 행이 필터링됩니다.
(*) 편집: 이 설명은 꽤 좋지만, 저는 미래의 트집을 잡지 않기 위해 한 가지를 다루고 싶습니다. (TRUE or NULL)은 TRUE로 평가할 것입니다.예를 들어 필드 1 = 3인 경우 이 값이 관련됩니다.이 TRUE 값은 FALSE로 음수가 되고 행은 필터링됩니다.
항상 위험한 일이 있습니다.NULL
에서IN
목록 - 종종 예상대로 동작합니다.IN
하지만 그것을 위한 것은 아닙니다.NOT IN
:
IF 1 NOT IN (1, 2, 3, NULL) PRINT '1 NOT IN (1, 2, 3, NULL)'
IF 1 NOT IN (2, 3, NULL) PRINT '1 NOT IN (2, 3, NULL)'
IF 1 NOT IN (2, 3) PRINT '1 NOT IN (2, 3)' -- Prints
IF 1 IN (1, 2, 3, NULL) PRINT '1 IN (1, 2, 3, NULL)' -- Prints
IF 1 IN (2, 3, NULL) PRINT '1 IN (2, 3, NULL)'
IF 1 IN (2, 3) PRINT '1 IN (2, 3)'
SQL 2005를 고려할 때, 당신은 이것도 시도할 수 있습니다. 이것은 오라클의 MINUS 명령과 비슷합니다(UNION의 반대).
그러나 디버그를 위해 DATEPART(시간, 날짜 삽입) 열을 추가하는 것도 제안합니다.
SELECT idCustomer FROM reservations
EXCEPT
SELECT idCustomer FROM reservations WHERE DATEPART ( hour, insertDate) < 2
SELECT Reservations.idCustomer FROM Reservations (nolock)
LEFT OUTER JOIN @reservations ExcludedReservations (nolock) ON Reservations.idCustomer=ExcludedReservations.idCustomer AND DATEPART(hour, ExcludedReservations.insertDate) < 2
WHERE ExcludedReservations.idCustomer IS NULL AND Reservations.idCustomer IS NOT NULL
GROUP BY Reservations.idCustomer
[업데이트:원래 포스터의 주요 문제였던 ID Customer가 NULL인 것을 처리하기 위한 추가 기준 추가]
요점을 놓쳤다면 미안하지만, 다음은 당신이 원하는 것을 알아서 하지 않을까요?
SELECT distinct idCustomer FROM reservations
WHERE DATEPART(hour, insertDate) >= 2
SELECT MIN(A.maxsal) secondhigh
FROM (
SELECT TOP 2 MAX(EmployeeBasic) maxsal
FROM M_Salary
GROUP BY EmployeeBasic
ORDER BY EmployeeBasic DESC
) A
select * from table_name where id=5 and column_name not in ('sandy,'pandy');
언급URL : https://stackoverflow.com/questions/296146/sql-query-question-select-not-in
'prosource' 카테고리의 다른 글
도커 컨테이너의 /dev/shm 크기를 늘리는 방법 (0) | 2023.08.26 |
---|---|
jQuery 유효성 검사 플러그인을 사용한 라디오 버튼 그룹 유효성 검사 (0) | 2023.08.26 |
URL을 클릭하면 기본 브라우저가 열립니다. (0) | 2023.08.26 |
어떻게 하면 핀터레스트의 핀 잇 버튼을 렌더링할 수 있습니까? (0) | 2023.08.26 |
jQuery의 select2 ajax 호출에 매개 변수 전달 (0) | 2023.08.26 |