다른 테이블에없는 행을 선택하십시오.
두 개의 postgresql 테이블이 있습니다.
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
login_log
에 행이없는 모든 IP 주소를 가져오고 싶습니다 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
양쪽의 값에 대한 "트랩"을 전달합니다 .
MySQL을 대상으로 한 dba.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 ;
Here testcases1 table contains all datas and executions1 table contains some data among testcases1 table. I am retrieving only the datas which are not present in exections1 table. ( and even I am giving some conditions inside that you can also give.) specify condition which should not be there in retrieving data should be inside brackets.
this can also be tried...
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 tip' 카테고리의 다른 글
스칼라의 패턴 매칭 시스템에서 비교 연산자 사용 (0) | 2020.06.15 |
---|---|
파일을 선택할 때 업로드 양식을 자동 제출하려면 어떻게합니까? (0) | 2020.06.15 |
이 milw0rm 힙 스프레이 익스플로잇은 어떻게 작동합니까? (0) | 2020.06.15 |
UILabel-줄 바꿈 텍스트 (0) | 2020.06.15 |
BigDecimal에 대한 추가 (0) | 2020.06.15 |