sql >> Databasteknik >  >> RDS >> Mysql

MySQL LEFT JOIN duplicerar resultaten

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 än IS NULL/IS NOT NULL skulle göra någon LEFT JOIN i samma tabell hänvisar du till en INNER 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 av DISTINCT , 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 även ORDER 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.



  1. Extrahera månaden från ett datum i PostgreSQL

  2. Division i Mysql-fråga

  3. Vad är makron och hur använder jag dem?

  4. Hur ASIN() fungerar i MariaDB