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

나는 잘 유지되고 있지 않다는 것을 알고있는 정의 테이블이 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의 행만 원합니다.



답변

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


답변

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

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

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


답변

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

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


답변

이것은 또한 작동합니다

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


답변

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

SELECT *
FROM   B
WHERE (SELECT count(*)  FROM   A WHERE  A.ID = B.ID) < 1


답변