Frage

SQL Server 2005.

Ich füge Foreign Key Constraints in die Datenbank einer Anwendung, die angeblich nicht, sie brauchte. Natürlich haben die Daten unzuverlässig und es wird verwaiste Einträge in dem Fremdschlüsselfeld.

Setup:
Zwei Tische, TableUser und Tableorder. TableUser hat Primary Key 'UserID' und Tableorder hat Foreign Key 'UserID'.

Wie finde ich die Zeilen, in denen TableOrder.UserID keinen passenden Eintrag in TableUser.UserID hat?

Zum Beispiel TableOrder.UserID hat einen Wert von 250, aber es gibt keine passenden TableUser.UserID Schlüssel für 250.

War es hilfreich?

Lösung

Hier ist eine Art und Weise:

select * from TableOrder where UserID not in (select UserID from TableUser);

Es gibt viele verschiedene Möglichkeiten, um diese Art von Abfrage zu schreiben.

Andere Tipps

Der andere gemeinsame Ansatz ist ein links Outer Join:

SELECT * FROM TableOrder o
LEFT OUTER JOIN TableUser u ON o.UserID = u.UserID
WHERE u.UserID is NULL

Diese Abfrage kann auch nützlich sein, ohne die where-Klausel, zu durchsuchen und die entsprechenden Werte sehen (falls vorhanden), und sieht, welche keine Übereinstimmung.

Es gab keine FK Einschränkungen in den Tabellen zu beginnen. Die wurden wie FK und PK verwendet, aber nicht codiert - der Glaube war, dass sie unnötiger Aufwand waren. So haben wir alle Spalten, aber keine codierten Einschränkungen. Als ich sie in setzen, so dass sie durchgesetzt werden würde, entdeckte ich, dass es viele Verletzungen waren.

Ihre Frage verdeutlicht das Problem. Sie sind nicht unnötigen Aufwand, sie verhindern, dass Menschen aus der allgemeinen Datenbank ASSHATTERY.

Sowohl Greg und Brad Antworten halfen mir aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top