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
WHEREverwenden Klausel außerIS NULL/IS NOT NULLwürde jedenLEFT JOINmachen Wenden Sie sich bei derselben Tabellenreferenz an einenINNER JOIN, wie für das Verhalten der endgültigen Ergebnismenge. (Siehe dies:https://stackoverflow.com/a/15483895/1291428 ) -
Sie sollten
GROUP BYnicht verwenden um den Effekt vonDISTINCTzu simulieren , aus 2 Gründen:1/ Das ist einfach nicht der Zweck. Einer der Effekte von
GROUP BYbesteht darin, Duplikate zu eliminieren, aber sein Hauptzweck besteht darin, Zeilen nach bestimmten Kriterien zu gruppieren, um einige analytische Berechnungen/Operationen darauf anzuwenden.2/
GROUP BYauchORDER BYdie 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.