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 |