[SQL] 다른 테이블에 존재하지 않는 행을 선택
SQL다른 테이블에 존재하지 않는 행을 선택
나는 두 PostgreSQL의 테이블을 가지고 :
table name column names
----------- ------------------------
login_log ip | etc.
ip_location ip | location | hostname | etc.
나는 IP_LOCATION의 행이없는 login_log에서 모든 IP 주소를 얻으려면. 나는이 쿼리를 시도했지만 구문 오류가 발생합니다.
SELECT login_log.ip
FROM login_log
WHERE NOT EXIST (SELECT ip_location.ip
FROM ip_location
WHERE login_log.ip = ip_location.ip)
(그것을 작동하도록 조정 포함)이 쿼리는 이러한 목적에 가장 적합한 수행하는 쿼리가있는 경우 나 또한 궁금하네요.
해결법
-
==============================
1.이 작업을 위해 4 개 기술, 그 표준 SQL의 모든 기본적으로있다.
이 작업을 위해 4 개 기술, 그 표준 SQL의 모든 기본적으로있다.
종종 빠른 포스트 그레스한다.
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 );
또한 고려 :
때때로 이것은 가장 빠른 것입니다. 종종 짧은. NOT이 존재 종종 같은 쿼리 계획을 초래한다.
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;
짧은. 쉽게 더 복잡한 쿼리에 통합되지 않습니다.
SELECT ip FROM login_log EXCEPT ALL -- "ALL" keeps duplicates and makes it faster SELECT ip FROM ip_location;
(문서 당)이 참고 :
일반적으로, 당신은 ALL 키워드를 할 것입니다. 당신은 상관하지 않는 경우 더 빠른 쿼리를 만들기 때문에, 여전히 그것을 사용할 수 있습니다.
만 NULL 값이없는 경우 또는 좋은 제대로 NULL을 처리하기 위해 알고있다. 나는이 목적을 위해 사용하지 않을 것입니다. 성능은 더 큰 테이블 악화 할 수 있습니다.
SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip -- DISTINCT is optional FROM ip_location );
NOT IN은 양쪽에 NULL 값에 대한 "함정"을 수행합니다 :
dba.SE에 비슷한 질문은 MySQL을 대상으로 :
-
==============================
2.A.) 명령은 아닙니다 당신이 'S'를 놓치고, 존재한다.
A.) 명령은 아닙니다 당신이 'S'를 놓치고, 존재한다.
B.)를 사용하여 NOT IN 대신
SELECT ip FROM login_log WHERE ip NOT IN ( SELECT ip FROM ip_location ) ;
-
==============================
3.고르다 * testcases1의 t FROM WHERE NOT 존재 ( SELECT 1 executions1 내가 FROM WHERE t.tc_id = i.tc_id 및 t.pro_id = i.pro_id 및 pro_id = 7 = 5 VERSION_ID ) 및 pro_id = 7;
고르다 * testcases1의 t FROM WHERE NOT 존재 ( SELECT 1 executions1 내가 FROM WHERE t.tc_id = i.tc_id 및 t.pro_id = i.pro_id 및 pro_id = 7 = 5 VERSION_ID ) 및 pro_id = 7;
여기 testcases1 표는 모든 datas를 포함하고 executions1 테이블 testcases1 테이블 사이에 일부 데이터가 포함되어 있습니다. 나는 exections1 테이블에 존재하지 않는 경우에만 datas를 검색하고 있습니다. (심지어 당신도 줄 수있는 내부의 조건을 제공하고있다.) 괄호 안에 있어야합니다 데이터를 검색에 존재하지 않아야 조건을 지정합니다.
-
==============================
4.이 또한 시도 할 수 있습니다 ...
이 또한 시도 할 수 있습니다 ...
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
from https://stackoverflow.com/questions/19363481/select-rows-which-are-not-present-in-other-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] UNION과 UNION ALL의 차이점은 무엇입니까? (0) | 2020.03.07 |
---|---|
[SQL] 어떻게 SQL에 가입하기로 UPDATE 문을 할 수 있습니까? (0) | 2020.03.07 |
[SQL] NOT NOT이있는 대 IN (0) | 2020.03.07 |
[SQL] SQL에서 행과 열을 바꾸어하는 간단한 방법은? (0) | 2020.03.07 |
[SQL] 어떻게 SQL 문에 사용자가 제공 한 입력을 추가 할 수 있습니까? (0) | 2020.03.07 |