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
WHEREannan klausul änIS NULL/IS NOT NULLskulle göra någonLEFT JOINi 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 BYfö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 BYresultaten (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.