[SQL] SQL 쿼리하지 다른 테이블에 ID와 기록을 찾을 수
SQLSQL 쿼리하지 다른 테이블에 ID와 기록을 찾을 수
나는 데이터베이스에 기본 키 바인딩을 가진 두 개의 테이블을 가지고 있고 나는 그들 사이의 연결이 끊긴 세트를 찾을 수 원한다. 예를 들어,
내가 표 2에없는 표에서 ID와 행을 가져올 수 있도록 그래서 SQL 쿼리를 작성하는 방법. 이 경우, (3, 메리는) 반환해야합니까?
추신. ID는 두 테이블에 대한 기본 키입니다.
미리 감사드립니다.
해결법
-
==============================
1.이 시도
이 시도
SELECT ID, Name FROM Table1 WHERE ID NOT IN (SELECT ID FROM Table2)
-
==============================
2.사용 LEFT는 가입
사용 LEFT는 가입
SELECT a.* FROM table1 a LEFT JOIN table2 b on a.ID = b.ID WHERE b.id IS NULL
-
==============================
3.나는 ~ 2M 행 각각 두 개의 테이블을 사용하여 (포스트 그레스 9.5에) 몇 가지 테스트를 실행. 아래에이 쿼리는 적어도 5를 수행 * 제안 된 다른 쿼리보다 더 :
나는 ~ 2M 행 각각 두 개의 테이블을 사용하여 (포스트 그레스 9.5에) 몇 가지 테스트를 실행. 아래에이 쿼리는 적어도 5를 수행 * 제안 된 다른 쿼리보다 더 :
-- Count SELECT count(*) FROM ( (SELECT id FROM table1) EXCEPT (SELECT id FROM table2) ) t1_not_in_t2; -- Get full row SELECT table1.* FROM ( (SELECT id FROM table1) EXCEPT (SELECT id FROM table2) ) t1_not_in_t2 JOIN table1 ON t1_not_in_t2.id=table1.id;
-
==============================
4.그 3 가지 기본적인 방법이 있습니다 :하지하지에 존재하고 왼쪽 / 가입 null입니다.
그 3 가지 기본적인 방법이 있습니다 :하지하지에 존재하고 왼쪽 / 가입 null입니다.
SELECT l.* FROM t_left l LEFT JOIN t_right r ON r.value = l.value WHERE r.value IS NULL
SELECT l.* FROM t_left l WHERE l.value NOT IN ( SELECT value FROM t_right r )
SELECT l.* FROM t_left l WHERE NOT EXISTS ( SELECT NULL FROM t_right r WHERE r.value = l.value )
어느 쪽이 더 나은 무엇입니까? 이 질문에 대한 답변이 더 중요한 특정의 RDBMS 벤더로 분류 할 수 있습니다. 일반적으로 하나 ... 선택 사용하지 마십시오해야 말하기 곳 ... (선택 ...) 서브 쿼리의 레코드 수의 크기를 알 수없는 경우입니다. 일부 공급 업체는 크기를 제한 할 수 있습니다. 오라클은, 예를 들어, 1,000의 제한이 있습니다. 할 수있는 가장 좋은 방법은 세 가지를 모두 시도하고 실행 계획을 보여주는 것입니다.
NOT가 존재 LEFT가 조인 PostgreSQL의 구체적 실행 계획을 형성 / NULL이 동일하다. 나는 개인적으로 더 나은 의도를 보여주고 있기 때문에 NOT 옵션이 존재 선호합니다. 결국 의미 당신은 그것의 PK가 B에 존재하지 않는 A의 기록을 발견 할 것입니다
올드하지만 여전히 금, PostgreSQL을 특정 비록 : https://explainextended.com/2009/09/16/not-in-vs-not-exists-vs-left-join-is-null-postgresql/
-
==============================
5.마음에 위 @ 존 우의 코멘트 / 링크에서 만든 점을 유지, 이것이 내가 일반적으로 그것을 처리 할 방법입니다
마음에 위 @ 존 우의 코멘트 / 링크에서 만든 점을 유지, 이것이 내가 일반적으로 그것을 처리 할 방법입니다
SELECT t1.ID, t1.Name FROM Table1 t1 WHERE NOT EXISTS ( SELECT TOP 1 NULL FROM Table2 t2 WHERE t1.ID = t2.ID )
-
==============================
6.
SELECT COUNT(ID) FROM tblA a WHERE a.ID NOT IN (SELECT b.ID FROM tblB b) --For count SELECT ID FROM tblA a WHERE a.ID NOT IN (SELECT b.ID FROM tblB b) --For results
from https://stackoverflow.com/questions/12048633/sql-query-to-find-record-with-id-not-in-another-table by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] XML의 PATH ( ''), 1,1)에 대한 SELECT의 의미는 ... 무엇입니까? (0) | 2020.06.02 |
---|---|
[SQL] 어떻게 SQL Server 인스턴스에 대한 데이터 디렉터리를 찾을 수 있습니까? (0) | 2020.06.02 |
[SQL] MySQL은 부울 값 부울 VS TINYINT (1) (0) | 2020.06.02 |
[SQL] 우리는 그것없이 가입 할 수있을 때 왜 기본 - 외부 키 관계가 필요합니까? (0) | 2020.06.02 |
[SQL] 엔티티 프레임 워크 4 코드 첫 번째로 사용 오류 데이터베이스 (0) | 2020.06.02 |