programing

PostgreSQL 'NOT IN' 및 하위 쿼리

bestprogram 2023. 5. 12. 22:46

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