다른 테이블에 없는 행 선택
다음 두 개의 postgresql 테이블이 있습니다.
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
모든 IP 주소를 취득하고 싶다.login_log
행이 없는 것ip_location
.
이 쿼리를 시도했지만 구문 오류가 발생합니다.
SELECT login_log.ip
FROM login_log
WHERE NOT EXIST (SELECT ip_location.ip
FROM ip_location
WHERE login_log.ip = ip_location.ip)
ERROR: syntax error at or near "SELECT" LINE 3: WHERE NOT EXIST (SELECT ip_location.ip`
또한 이 쿼리가 (동작하도록 조정된) 가장 성능이 좋은 쿼리인지 궁금합니다.
이 작업에는 기본적으로 4가지 기술이 있으며 모두 표준 SQL입니다.
NOT EXISTS
Postgres에서 가장 빠른 경우가 많습니다.
SELECT ip
FROM login_log l
WHERE NOT EXISTS (
SELECT -- SELECT list mostly irrelevant; can just be empty in Postgres
FROM ip_location
WHERE ip = l.ip
);
다음 사항도 고려해야 합니다.
LEFT JOIN / IS NULL
이게 가장 빠를 때가 있어요.종종 가장 짧다.대부분의 경우 와 같은 쿼리 계획이 발생합니다.NOT EXISTS
.
SELECT l.ip
FROM login_log l
LEFT JOIN ip_location i USING (ip) -- short for: ON i.ip = l.ip
WHERE i.ip IS NULL;
EXCEPT
짧고 복잡한 질의에 쉽게 통합되지 않습니다.
SELECT ip
FROM login_log
EXCEPT ALL -- "ALL" keeps duplicates and makes it faster
SELECT ip
FROM ip_location;
(매뉴얼에 따라) 다음 사항에 주의해 주십시오.
중복되는 경우는 제외됩니다.
EXCEPT ALL
사용됩니다.
일반적으로, 여러분은ALL
키워드를 지정합니다.상관 없는 경우 쿼리를 더 빠르게 할 수 있으므로 계속 사용하십시오.
NOT IN
없는 것만이 좋다null
값 또는 처리 방법을 알고 있는 경우null
적절히.나는 이것을 이런 목적으로 사용하지 않을 것이다.또한 테이블이 클수록 성능이 저하될 수 있습니다.
SELECT ip
FROM login_log
WHERE ip NOT IN (
SELECT DISTINCT ip -- DISTINCT is optional
FROM ip_location
);
NOT IN
함정을 품다null
값을 지정합니다.
dba에 대해서도 같은 질문입니다.MySQL 대상 SE:
A.) 명령이 존재하지 않습니다. 'S'가 누락되었습니다.
B.) 대신 NOT IN 사용
SELECT ip
FROM login_log
WHERE ip NOT IN (
SELECT ip
FROM ip_location
)
;
SELECT * FROM testcases1 t WHERE NOT EXISTS ( SELECT 1
FROM executions1 i WHERE t.tc_id = i.tc_id and t.pro_id=i.pro_id and pro_id=7 and version_id=5 ) and pro_id=7 ;
여기 testcase1 테이블에는 모든 데이터가 포함되어 있으며 executions1 테이블에는 testcase1 테이블 간의 데이터가 포함되어 있습니다.exceptions1 표에 없는 데이터만을 취득하고 있습니다.(또한 당신이 줄 수 있는 몇 가지 조건을 기재하고 있습니다.) 데이터 취득에 있어서는 있어서는 안 되는 조건을 괄호 안에 넣어야 합니다.
이것도 시도해 볼 수 있다...
SELECT l.ip, tbl2.ip as ip2, tbl2.hostname
FROM login_log l
LEFT JOIN (SELECT ip_location.ip, ip_location.hostname
FROM ip_location
WHERE ip_location.ip is null)tbl2
언급URL : https://stackoverflow.com/questions/19363481/select-rows-which-are-not-present-in-other-table
'programing' 카테고리의 다른 글
Eclipse 보안 스토리지입니다. (0) | 2023.04.25 |
---|---|
Excel MATCH()가 일치하는 항목을 찾지 못하는 이유는 무엇입니까? (0) | 2023.04.25 |
SO_REUSEADDR과 SO_REUSEPORT의 차이점은 무엇입니까? (0) | 2023.04.20 |
UIButton의 배경 이미지로 사용할 UICollor에서 UIImage 만들기 (0) | 2023.04.20 |
Excel 매크로(vba)의 restful API를 사용하려면 어떻게 해야 합니까? (0) | 2023.04.20 |