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

SQL Self-join con comparación de datos para diferentes días

Obtiene columnas duplicadas porque, tal como las tiene, está consultando desde T1 Y T2. Entonces, a menos que diga explícitamente que me muestre solo T1.*, tomará columnas de AMBAS referencias de alias de tabla.

Dado que su consulta está haciendo un OR en las fechas, es probable que también obtenga un resultado cartesiano.

Ahora que conoce la estructura de su tabla, pero podría ser mejor con una consulta explícita como...

SELECT
      t1.day,
      t2.day as OtherDay,
      t1.quality,
      t1.anotherColumn,
      t2.OtherAnotherColumn,
      t1.thirdColumn,
      t2.OtherThirdColumn
   FROM 
      my_table t1
         join my_table t2
            on t1.quality = t2.quality
           AND t2.day = '2015-01-09'
   where
      t1.day = '2015-01-08' 

Tenga un índice en su "mi_tabla" basado en (día, calidad) para optimizar la consulta. Y puede seguir agregando en pares, las columnas que está tratando de comparar entre el día 1 y el día 2. T1 solo devolverá aquellos asociados con el primer día, y el alias T2 solo se mostrará para entradas coincidentes para la segunda fecha.

Ahora, si solo hay entradas en el lado T1 sin la entrada T2 correspondiente para la calidad y la fecha en cuestión, pero aún desea verlas, simplemente cambie JOIN a LEFT JOIN.