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ßerIS NULL/IS NOT NULL
würde jedenLEFT JOIN
machen 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 BY
nicht verwenden um den Effekt vonDISTINCT
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
auchORDER 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.