Ich möchte in der Lage sein, leicht zu überprüfen, welche eindeutigen Bezeichner in einer Tabelle nicht vorhanden sind, von denen, die in einer Abfrage angegeben sind.
Um dies besser zu erklären, würde ich jetzt Folgendes tun, um zu überprüfen, welche IDs der Liste "1, 2, 3, 4" in einer Tabelle nicht vorhanden sind:
SELECT * FROM dbo."TABLE" WHERE "ID" IN ('1','2','3','4')
Angenommen, die Tabelle enthält keine Zeile mit der ID 2.- Speichern Sie die Ergebnisse in Excel
- Führen Sie ein VLOOKUP für die ursprüngliche Liste aus, das nach jedem Listenwert in der Ergebnisliste sucht.
- Jedes VLOOKUP, das zu einem führt,
#N/A
befindet sich auf einem Wert, der in der Tabelle nicht vorkommt.
Ich denke, es muss einen besseren Weg geben, dies zu tun. Ich suche im Idealfall so etwas
Zu überprüfende Liste -> Zu überprüfende Tabelle abfragen -> Mitglieder der Liste nicht in Tabelle
sql-server
sql-server-2005
except
NReilingh
quelle
quelle
Antworten:
Verwendung
EXCEPT
:Siehe SqlFiddle .
Der
values
Konstruktor funktioniert nur unter SQL Server 2008 oder höher. Für 2005 verwendenwie in dieser SO-Antwort beschrieben .
quelle
Incorrect syntax near the keyword 'values'.
SELECT * FROM (values ('search string'),('other string')) as T(ID)
Ich würde eine Tabellenvariable oder eine temporäre Tabelle erstellen, die die IDs enthält, nach denen Sie suchen ... und dann Remus 'Lösung abzüglich des syntaktischen Zuckers von 2008 verwenden:
quelle
Ich bin jetzt ein paar Jahre weiser (und habe einen neueren SQL Server) als damals, als ich diese Frage gestellt habe. Um das berühmte Fragenabzeichen zu feiern, das ich dafür bekommen habe, würde ich jetzt Folgendes tun. (Ich glaube nicht, dass ich den
EXCEPT
Operator seitdem jemals benutzt habe .)Ich würde sagen, dass die folgende
LEFT JOIN
Methode nützlicher ist, alsEXCEPT
da Sie sie mit anderen Joins erstellen können, ohne einen CTE zu benötigen.quelle