Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL LEFT JOIN dupliziert Ergebnisse

Nein, das ist in Ordnung. Dies ist nur einer der seltenen Fälle, in denen Sie den DISTINCT verwenden möchten Schlüsselwort zum Entfernen von Duplikaten.

In diesem Fall wird dies damit begründet, dass die Logik der Abfrage korrekt ist, obwohl sie mehr als eine Zeile zurückgibt. Oft sieht man die Verwendung von DISTINCT wenn eigentlich die Logik der Abfrage falsch ist.

Nebenbemerkung:

  • jeder Filter für eine Tabellenreferenz, die Sie im WHERE verwenden Klausel außer IS NULL/IS NOT NULL würde jeden LEFT JOIN machen Wenden Sie sich bei derselben Tabellenreferenz an einen INNER JOIN , wie für das Verhalten der endgültigen Ergebnismenge. (Siehe dies:https://stackoverflow.com/a/15483895/1291428 )
  • Sie sollten GROUP BY nicht verwenden um den Effekt von DISTINCT zu simulieren , aus 2 Gründen:

    1/ Das ist einfach nicht der Zweck. Einer der Effekte von GROUP BY besteht darin, Duplikate zu eliminieren, aber sein Hauptzweck besteht darin, Zeilen nach bestimmten Kriterien zu gruppieren, um einige analytische Berechnungen/Operationen darauf anzuwenden.

    2/ GROUP BY auch ORDER BY die Ergebnisse (in mysql), was nicht unbedingt das ist, was Sie wollen, und in diesem Fall die Ausführung verlangsamt. Bitte sorgen Sie nur für eine angemessene Nutzung dessen, was die Engines bieten, das ist immer besser aus Sicht der Vorwärtskompatibilität. (in der Annahme, dass das, was Sie als selbstverständlich einstufen, eigentlich nicht ist)

Grüße.