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