SELECT con resultados repetidos


Este es un pequeño truco (o dos, mejor dicho) para cuando los resultados de una consulta salen repetidos, es decir, en una consulta del tipo:

SELECT autor FROM notas

el resultado va a ser el autor de cada nota; pero si un autor participa de varias notas, va a aparecer varias veces.

Este es el caso más simple. Hay consultas mucho más complejas que también devuelven resultados repetidos.
Podemos atacar este problema de dos maneras:

SELECT DISTINCT autor FROM notas

o bien:

SELECT autor FROM notas GROUP BY autor

En tablas con relaciones uno a muchos (o muchos a muchos) se pueden tambien generar duplicados con el mismo id. Esto se resuelve agregando “GROUP BY id” al final, por ejemplo:

SELECT n.*
  FROM notas AS n
    LEFT JOIN imagenes_notas AS imnot
      ON imnot.id_nota=n.id
    LEFT JOIN imagenes AS i
      ON i.id=imnot.id_imagen

Esta imagen nos daría varios registros por cada nota, uno con cada imagen distinta. Si sólo nos interesa la primer imagen y no queremos resultados repetidos, podríamos escribir:

SELECT n.*
  FROM notas AS n
    LEFT JOIN imagenes_notas AS imnot
      ON imnot.id_nota=n.id
    LEFT JOIN imagenes AS i
      ON i.id=imnot.id_imagen
  GROUP BY n.id

Y así solucionamos el tema de los registros repetidos.

, , , ,

  1. No hay Comentarios
(No será publicado)