2013-04-10 117 views
44

我有一個定義表,我知道它沒有被很好地維護,我們稱之爲table A。我有另一個表(稱爲table B),這是更小,理想情況下應該是subset of table A,但我知道table A有點陳舊,並且不包含Table B中的新條目。sql:檢查表A中是否存在表B中的條目

請注意,表A和B具有不同的列。

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

Table B: 
ID, Name 

我想表B中的所有行,表B中的ID不表A.存在,所以這是不是不符合表A一排,我只希望在表B,其中行ID不表A.在所有存在

回答

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

真棒。就是這樣!非常感謝。 – codingknob 2013-04-10 23:32:31

+0

@ algotr8der,我很樂意提供幫助。美好的一天。 – gdoron 2013-04-10 23:34:19

+2

'select * from TableB b where b.ID not in(select a.ID from TableA)' – vakio 2016-09-15 13:27:16

12

如果您在使用存在,你可以在SQL Server中使用以下設置:

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

,幾乎每一個環境中工作中的經典答案是

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

有時不存在可能沒有實現(不工作)。

+0

謝謝,這幫了很大的忙! – lenach87 2017-05-08 13:23:30

0

或將 「NOT EXISTS」 不落實

SELECT * 
FROM B 
WHERE (SELECT count(*) FROM A WHERE A.ID = B.ID) < 1 
相關問題