Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL LEFT JOIN duplica resultados


Não, isso é bom. Este é apenas um dos raros casos em que você deseja usar o DISTINCT palavra-chave para remover duplicatas.

Nesse caso isso se justifica pelo fato da lógica da consulta estar correta, mesmo que retorne mais de uma linha. Muitas vezes pode-se ver o uso de DISTINCT quando na verdade a lógica da consulta está errada.

Nota:
  • qualquer filtro em uma referência de tabela que você está usando em WHERE cláusula diferente de IS NULL/IS NOT NULL faria qualquer LEFT JOIN nesta mesma referência de tabela, vire para um INNER JOIN , quanto ao comportamento final do conjunto de resultados. (veja isto:https://stackoverflow.com/a/15483895/1291428 )

  • você não deve usar GROUP BY para simular o efeito de DISTINCT , por 2 motivos:

    1/ Este não é o propósito. Um dos efeitos de GROUP BY é eliminar duplicatas, mas seu principal objetivo é agrupar linhas de acordo com um determinado conjunto de critérios, a fim de aplicar alguns cálculos/operações analíticas sobre elas.

    2/ GROUP BY também ORDER BY os resultados (no mysql), que não é necessariamente o que você quer e nesse caso atrasa a execução. Por favor, apenas assegure o uso apropriado do que os mecanismos estão fornecendo, isso é sempre melhor do ponto de vista da compatibilidade futura. (antecipando que o que você inclui como concedido na verdade não é)

Saudações.