PostgreSQL 'NOT IN' 및 하위 쿼리
이 쿼리를 실행하려고 합니다.
SELECT mac, creation_date
FROM logs
WHERE logs_type_id=11
AND mac NOT IN (select consols.mac from consols)
하지만 결과가 없습니다.제가 테스트해봤는데, 구문에 문제가 있다는 것을 알고 있습니다.MySQL에서는 이러한 쿼리가 완벽하게 작동합니다.행이 있는지 확인하기 위해 행을 추가했습니다.mac
에 존재하지 않는.consols
테이블, 하지만 여전히 아무런 결과를 제공하지 않습니다.
NOT IN을 사용할 때는 값이 NULL이 아닌지 확인해야 합니다.
SELECT mac, creation_date
FROM logs
WHERE logs_type_id=11
AND mac NOT IN (
SELECT mac
FROM consols
WHERE mac IS NOT NULL -- add this
)
NOT IN을 사용할 때는 NOT EXPRESS도 고려해야 합니다. 이 경우 NOT EXPRESS는 null 케이스를 자동으로 처리합니다.Postgre 참고SQL Wiki
SELECT mac, creation_date
FROM logs lo
WHERE logs_type_id=11
AND NOT EXISTS (
SELECT *
FROM consols nx
WHERE nx.mac = lo.mac
);
왼쪽 조인 및 IS NULL 조건을 사용할 수도 있습니다.
SELECT
mac,
creation_date
FROM
logs
LEFT JOIN consols ON logs.mac = consols.mac
WHERE
logs_type_id=11
AND
consols.mac IS NULL;
"mac" 열의 인덱스는 성능을 향상시킬 수 있습니다.
언급URL : https://stackoverflow.com/questions/8463043/postgresql-not-in-and-subquery
'programing' 카테고리의 다른 글
열거형에 포함될 수 있는 모든 값을 가져오기 위한 SQL 쿼리 (0) | 2023.05.12 |
---|---|
문자열에서 정수 값을 swift로 가져옵니다. (0) | 2023.05.12 |
GUID가 GUID인지 확인하는 방법 (0) | 2023.05.12 |
Postgre에서 UTC의 현재 시간을 기본값으로 사용SQL (0) | 2023.05.12 |
판다가 인식하는 모든 d타입은 무엇입니까? (0) | 2023.05.12 |