Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL LEFT JOIN duplique les résultats

Non, c'est bien. Ce n'est qu'un des rares cas où vous souhaitez utiliser le DISTINCT mot clé pour supprimer les doublons.

Dans ce cas cela se justifie par le fait que la logique de la requête est correcte, même si elle retourne plus d'une ligne. Plusieurs fois, on peut voir l'utilisation de DISTINCT alors que la logique de la requête est erronée.

Remarque :

  • tout filtre sur une référence de table que vous utilisez dans WHERE clause autre que IS NULL/IS NOT NULL ferait n'importe quel LEFT JOIN sur cette même référence de table tournez vers un INNER JOIN , comme pour le comportement du jeu de résultats final. (voir ceci :https://stackoverflow.com/a/15483895/1291428 )
  • vous ne devez pas utiliser GROUP BY pour simuler l'effet de DISTINCT , pour 2 raisons :

    1/ Ce n'est pas le but. Un des effets de GROUP BY est d'éliminer les doublons, mais son objectif principal est de regrouper les lignes selon un certain ensemble de critères, afin de leur appliquer des calculs/opérations analytiques.

    2/ GROUP BY également ORDER BY les résultats (en mysql), ce qui n'est pas forcément ce que l'on veut et dans ce cas ralentit l'exécution. S'il vous plaît, assurez-vous simplement d'utiliser correctement ce que les moteurs fournissent, c'est toujours mieux du point de vue de la compatibilité ascendante. (en anticipant que ce que vous incluez comme accordé ne l'est en fait pas)

cordialement.