Rolf B: Mysql Vergleich mehrere Tabellen gleiche Spalte wert filtern

Beitrag lesen

Hallo dedlfix,

Differenzen können mit Outer Joins gefunden werden

Yup

gemeinhin nimmt man da einen Left Join.

Kommt drauf an. Wenn ich genau weiß, dass die Rows in einer der Tables allesamt in der anderen Table enthalten sind, kann ich das machen.

Wenn ich das nicht weiß, mache ich einen OUTER JOIN

Was in der anderen Tabelle nicht da ist, zeigt NULL-Werte im Ergebnis.

Ja. Im Falle des OUTER JOIN wäre dann in einer der beiden Tables die Email-Adresse NULL.

Danach kannst du dann in der Having-Klausel einschränken.

Hm. Die Reihenfolge im logischen SQL Ausführungsmodell ist:

  • Tabellen JOINen
  • Rows gemäß WHERE filtern (die ONs in JOINs sind letztlich auch nur verkappte WHEREs)
  • Gruppieren und aggregieren
  • gruppierte und aggregierte Rows gemäß HAVING filtern

(die physische Ausführung mag abweichen, das ist Sache des Optimizers)

HAVING müsste demnach also funktionieren, ist aber eigentlich das falsche Werkzeug. Die NULL Prüfung gehört mNn in die WHERE Stufe.

Ein anderer Ansatz ist (...) NOT IN

Das mag effizienter sein, weil der Server nicht erstmal JOINen und dann ausfiltern muss. Es wird auch keine unnötig breite Zwischenergebnismenge aufgebaut. Es gilt aber das Gleiche wie für den LEFT JOIN: man findet damit nur den Überschuss in einer Tabelle. Gibt's in beiden Tabellen unpaarige Sätze, muss man es zweimal machen.

Rolf

--
sumpsi - posui - clusi