sql >> Database teknologi >  >> RDS >> Mysql

MySQL LEFT JOIN dublerer resultater

Nej, det er fint. Dette er blot et af de sjældne tilfælde, hvor du vil bruge DISTINCT nøgleord for at fjerne dubletter.

I dette tilfælde er dette begrundet med, at logikken i forespørgslen er korrekt, selvom den returnerer mere end én række. Mange gange kan man se brugen af ​​DISTINCT når logikken i forespørgslen faktisk er forkert.

Sidebemærkning:

  • ethvert filter på en tabelreference, du bruger i WHERE anden klausul end IS NULL/IS NOT NULL ville gøre enhver LEFT JOIN på samme tabelhenvisning vend til en INNER JOIN , hvad angår den endelige resultatopførsel. (se dette:https://stackoverflow.com/a/15483895/1291428 )
  • du bør ikke bruge GROUP BY at simulere effekten af ​​DISTINCT , af 2 grunde:

    1/ Dette er bare ikke formålet. En af effekterne af GROUP BY er at eliminere dubletter, men dets hovedformål er at gruppere rækker efter et bestemt sæt kriterier for at anvende nogle analytiske beregninger/operationer på dem.

    2/ GROUP BY også ORDER BY resultaterne (i mysql), hvilket ikke nødvendigvis er det du ønsker og i så fald bremser eksekveringen. Venligst, sørg bare for passende brug af det, motorerne leverer, det er altid bedre ud fra et synspunkt om fremadrettet kompatibilitet. (forudser, at det, du medtager som givet, faktisk ikke er det)

hilsen.



  1. INDSÆT flere poster ved hjælp af ruby ​​on rails aktive rekord

  2. Hvad er rodfejlen bag Kunne ikke etablere en databaseforbindelse. Tjek forbindelsesstreng, brugernavn og adgangskode.

  3. Sådan opretter du forbindelse til MySQL ved hjælp af Python

  4. MYSQL-forespørgsel mellem to tidsstempler