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

SQL Self-join com comparação de dados para dias diferentes


Você está obtendo colunas duplicadas porque, como você tem, está consultando de T1 E T2. Portanto, a menos que você diga explicitamente mostre-me apenas T1.*, ele pegará colunas de AMBAS as referências de alias de tabela.

Como sua consulta está fazendo um OR nas datas, você provavelmente também obterá um resultado cartesiano.

Agora conhecendo sua estrutura de tabela, mas você pode ser melhor com uma consulta explícita algo 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' 

Tenha um índice em sua "my_table" com base em (dia, qualidade) para otimizar a consulta. E você pode continuar adicionando em pares, as colunas que você está tentando comparar entre dia1 e dia2. T1 retornará apenas aqueles associados ao primeiro dia, e o alias T2 será exibido apenas para entradas correspondentes para a segunda data.

Agora, se houver apenas entradas no lado T1 sem entrada T2 correspondente para a qualidade e data em questão, mas você ainda deseja vê-las, basta alterar o JOIN para LEFT JOIN.