SQL : 테이블 A의 항목이 테이블 B에 있는지 확인


80

나는 잘 유지되고 있지 않다는 것을 알고있는 정의 테이블이 table A있습니다. 나는 다른 테이블 (호출이 table B훨씬 작)와 이상적이어야 subset of table A하지만 그게 알고 table A다소 부실과에 새 항목을 포함하지 않습니다 Table B.

테이블 A와 B에는 다른 열이 있습니다.

Table A:
ID, Name, blah, blah, blah, blah

Table B:
ID, Name

테이블 B의 ID가 테이블 A에 존재하지 않도록 테이블 B의 모든 행을 원합니다. 이것은 테이블 A의 행과 일치하지 않습니다. ID가 테이블 A에 전혀 존재하지 않는 테이블 B의 행만 원합니다.

답변:


172
SELECT *
FROM   B
WHERE  NOT EXISTS (SELECT 1 
                   FROM   A 
                   WHERE  A.ID = B.ID)

@ algotr8der, 도와 줘서 기뻤습니다. 좋은 날.
gdoron 모니카 지원하고

10
select * from TableB b where b.ID not in (select a.ID from TableA a)
vakio

2
@vakio 문의 해 주셔서 감사합니다. 당신은 확실히 당신의 의견을 대답으로 넣어야합니다.
Analytical Monk

@AnalyticalMonk 정확히 동일한 결과를 산출하는 정확히 동일한 쿼리임을 알고 있기를 바랍니다. 그냥 약간 다른 구문은, 그게 다야
gdoron 모니카 지원하고있다

2
@ManosKounelakis Select 11각 행의 결과로 반환 을 의미 합니다. 결과는 중요하지 않지만 존재 자체가 중요하다는 것을 표시하는 데 자주 사용됩니다. 당신은 변경할 수 있습니다 1모든 유효한 값 (*, 1,2,3, 1 열, 2 열)에 그 결과는 변경되지 않습니다.
gdoron 모니카 지원하고있다

28

거의 모든 환경에서 작동하는 고전적인 대답은

SELECT ID, Name, blah, blah
FROM TableB TB
LEFT JOIN TableA TA
ON TB.ID=TA.ID
WHERE TA.ID IS NULL

때로는 NOT EXISTS가 구현되지 않을 수 있습니다 (작동하지 않음).


감사합니다. 많은 도움이되었습니다!
lenach87

이 쿼리는 SELECT * FROM B WHERE NOT EXISTS보다 효율적입니다 (SELECT 1 FROM A WHERE A.ID = B.ID)
teteArg

DUAL은 모든 Oracle 데이터베이스에 기본적으로 존재하는 특별한 한 행, 하나의 열 테이블입니다. DUAL의 소유자는 SYS (SYS는 데이터 사전을 소유하므로 DUAL은 데이터 사전의 일부입니다.)이지만 DUAL은 모든 사용자가 액세스 할 수 있습니다. 테이블에는 'X'값이있는 DUMMY라는 단일 VARCHAR2 (1) 컬럼이 있습니다. MySQL을 사용하면 테이블의 데이터가 필요하지 않은 쿼리에서 DUAL을 테이블로 지정할 수 있습니다. SQL Server에는 DUAL 테이블이 없지만 하나를 만들 수 있습니다.
David Kariuki

14

EXISTS를 사용하도록 설정 한 경우 SQL Server에서 다음을 사용할 수 있습니다.

SELECT * FROM TableB as b
WHERE NOT EXISTS
(
   SELECT * FROM TableA as a
   WHERE b.id = a.id
)

3

이것은 또한 작동합니다

SELECT *
FROM tableB
WHERE ID NOT IN (
  SELECT ID FROM tableA
);

0

또는 "NOT EXISTS"가 구현되지 않은 경우

SELECT *
FROM   B
WHERE (SELECT count(*)  FROM   A WHERE  A.ID = B.ID) < 1
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.