sql >> Base de Datos >  >> RDS >> Mysql

MySQL LEFT JOIN duplica los resultados

No, esto está bien. Este es solo uno de los raros casos en los que desea utilizar DISTINCT palabra clave para eliminar duplicados.

En este caso esto se justifica por el hecho de que la lógica de la consulta es correcta, aunque devuelva más de una fila. Muchas veces uno puede ver el uso de DISTINCT cuando en realidad la lógica de la consulta es incorrecta.

Nota al margen:

  • cualquier filtro en una referencia de tabla que esté usando en WHERE cláusula que no sea IS NULL/IS NOT NULL haría cualquier LEFT JOIN en esta misma referencia de tabla, cambie a INNER JOIN , en cuanto al comportamiento final del conjunto de resultados. (ver esto:https://stackoverflow.com/a/15483895/1291428 )
  • no deberías usar GROUP BY para simular el efecto de DISTINCT , por 2 razones:

    1/ Este no es el propósito. Uno de los efectos de GROUP BY es eliminar duplicados, pero su objetivo principal es agrupar filas de acuerdo con un determinado conjunto de criterios, para poder aplicarles algunos cálculos/operaciones analíticas.

    2/ GROUP BY también ORDER BY los resultados (en mysql), que no es necesariamente lo que desea y en ese caso ralentiza la ejecución. Por favor, solo asegúrese de hacer un uso adecuado de lo que proporcionan los motores, eso siempre es mejor desde el punto de vista de la compatibilidad futura. (anticipando que lo que incluye como concedido en realidad no lo es)

saludos.