Nej, det här är bra. Detta är bara ett av de sällsynta fallen när du vill använda DISTINCT
nyckelord för att ta bort dubbletter.
I det här fallet motiveras detta av det faktum att logiken i frågan är korrekt, även om den returnerar mer än en rad. Många gånger kan man se användningen av DISTINCT
när faktiskt logiken i frågan är felaktig.
Sidanteckning:
- alla filter på en tabellreferens som du använder i
WHERE
annan klausul änIS NULL/IS NOT NULL
skulle göra någonLEFT JOIN
i samma tabell hänvisar du till enINNER JOIN
, vad gäller beteendet i slutresultatet. (se detta:https://stackoverflow.com/a/15483895/1291428 ) -
du bör inte använda
GROUP BY
för att simulera effekten avDISTINCT
, av två anledningar:1/ Detta är bara inte syftet. En av effekterna av
GROUP BY
är att eliminera dubbletter, men dess huvudsakliga syfte är att gruppera rader enligt en viss uppsättning kriterier, för att tillämpa några analytiska beräkningar/operationer på dem.2/
GROUP BY
ävenORDER BY
resultaten (i mysql), vilket inte nödvändigtvis är vad du vill ha och i så fall saktar ner exekveringen. Snälla, se bara till att det som motorerna tillhandahåller korrekt används, det är alltid bättre ur synvinkel framåtkompatibilitet. (förutse att det du inkluderar som beviljat faktiskt inte är det)
hälsningar.