4 Stimmen

MySQL Select-Anweisung, bei der table1.id != table2.id

Ich habe eine Tabelle mit Daten, die Beiträge enthält, dann habe ich eine separate Tabelle mit Daten, die gelöschte Beiträge enthält. Wenn ein Beitrag gelöscht wird, wird seine ID der gelöschten Tabelle hinzugefügt, anstatt den Beitragseintrag zu entfernen.

Was ist ein sauberer und effizienter Weg, um alle Beiträge aus der Beiträge-Tabelle auszuwählen, ohne diejenigen auszuwählen, deren ID sich in der gelöschten Tabelle befindet?

2voto

bigstylee Punkte 1232

Wäre es nicht einfacher, Ihrer Beitrags-Tabelle eine zusätzliche Spalte hinzuzufügen und einen booleschen Wert von "gelöscht" zu speichern? Oder verwenden Sie ein Integer-Feld (um die Benutzer-ID darzustellen), wenn Sie speichern möchten, wer es gelöscht hat, 0 = nicht gelöscht.

0 Stimmen

Das wäre einfacher, aber dies betrifft eine Infrastruktur von Drittanbietern, die ich nicht entworfen habe und für die ich die Kernstruktur nicht ändern kann.

2voto

Peter Lang Punkte 52229

Wenn Sie Ihre Tabellen nicht ändern können, können Sie einen Left Join durchführen (der Ihre deleted_table verknüpft, wenn möglich) und dann überprüfen, ob die id Null ist (was bedeutet, dass keine Zeile gefunden wurde).

Wählen Sie alles, was Sie benötigen
Von post_table p
Left Join delete_table d On ( d.id = p.id )
Wo d.id Ist Null;

Stellen Sie sicher, dass Sie Indizes auf beiden id-Spalten für die beste Leistung haben.

1voto

Tomas Punkte 4996

Wenn Sie einen guten Grund haben, um nicht ein Boolean-Flag wie von bigstylee vorgeschlagen zu verwenden, können Sie eine EXISTS-Unterabfrage verwenden:

SELECT * FROM table1 
  WHERE NOT EXISTS 
  (SELECT * FROM table2 WHERE table1.id=table2.id);

1 Stimmen

Das wird funktionieren, aber ein einfacher LEFT JOIN wäre viel einfacher als ein Subselect durchzuführen.

0 Stimmen

Ich widerspreche. Dies scheint mir viel klarer und lesbarer zu sein, da es tatsächlich angibt, was du tust. In diesem einfachen Beispiel wird Mysql es genauso optimieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X