2013-04-10 5 views
44

Ich habe eine Definitionstabelle, von der ich weiß, dass sie nicht sehr gut gewartet wird, lassen Sie uns dies table A nennen. Ich habe eine andere Tabelle (nennen Sie es table B), die viel kleiner ist und idealerweise sollte ein subset of table A sein, aber ich weiß, dass table A ist etwas veraltet und enthält keine neuen Einträge, die in Table B sind.sql: Überprüfen, ob Eintrag in Tabelle A in Tabelle B existiert

Beachten Sie, dass die Tabellen A und B unterschiedliche Spalten haben.

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

Table B: 
ID, Name 

Ich möchte alle Zeilen in Tabelle B, so dass die ID in der Tabelle B nicht in Tabelle A existiert also nicht ist keine Zeile in der Tabelle A entspricht, mag ich nur die Zeilen in Tabelle B, wo die ID existieren alle in Tabelle A haupt nicht

Antwort

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

ehrfürchtig. Das war's! Schätze es sehr. – codingknob

+0

@ algotr8der, ich war froh zu helfen. Schönen Tag. – gdoron

+2

'wählen * aus TableB b wo b.ID nicht in (wählen a.ID von TableA a)' – vakio

12

Wenn Sie setzen auf mit EXISTS können Sie die unten in SQL Server verwenden:

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

die klassische Antwort, die in fast jeder Umgebung funktioniert ist

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

manchmal NOT EXISTS möglicherweise nicht implementiert (funktioniert nicht).

+0

Danke, das hat sehr geholfen! – lenach87

0

Oder wenn sich "ist nicht vorhanden" nicht

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