sql >> Database >  >> RDS >> Mysql

MySQL LEFT JOIN dupliceert resultaten

Nee, dit is prima. Dit is slechts een van de zeldzame gevallen waarin u de DISTINCT . wilt gebruiken sleutelwoord om duplicaten te verwijderen.

In dit geval wordt dit gerechtvaardigd door het feit dat de logica van de query correct is, ook al retourneert deze meer dan één rij. Vaak zie je het gebruik van DISTINCT terwijl de logica van de zoekopdracht feitelijk niet klopt.

Kanttekening:

  • elk filter op een tabelverwijzing die u gebruikt in de WHERE andere clausule dan IS NULL/IS NOT NULL zou elke LEFT JOIN . maken op dezelfde tafel referentie draai naar een INNER JOIN , wat betreft het gedrag van de uiteindelijke resultaten. (zie dit:https://stackoverflow.com/a/15483895/1291428 )
  • u mag GROUP BY niet gebruiken om het effect van DISTINCT . te simuleren , om 2 redenen:

    1/ Dit is gewoon niet het doel. Een van de effecten van GROUP BY is om duplicaten te elimineren, maar het belangrijkste doel is om rijen te groeperen volgens een bepaalde reeks criteria, om er enkele analytische berekeningen/bewerkingen op toe te passen.

    2/ GROUP BY ook ORDER BY de resultaten (in mysql), wat niet noodzakelijk is wat je wilt en in dat geval de uitvoering vertraagt. Zorg er alstublieft voor dat u op de juiste manier gebruik maakt van wat de motoren bieden, dat is altijd beter vanuit het oogpunt van voorwaartse compatibiliteit. (in de verwachting dat wat u opneemt als verleend, dat eigenlijk niet is)

groeten.



  1. Mogelijk om alles te verwijderen na een 'spatie' in het MySQL-veld?

  2. UUID-string formatteren zonder REGEXP_REPLACE en PL/SQL

  3. MySQL-fout 1436:Thread-stack overschrijding, met eenvoudige query

  4. PHP date('W') vs MySQL JAARWEEK(nu())