Mysql
 sql >> Database >  >> RDS >> Mysql

SQL Self-join con confronto dei dati per giorni diversi

Stai ricevendo colonne duplicate perché, così com'è, stai interrogando da T1 E T2. Quindi, a meno che tu non dica esplicitamente mostrami solo T1.*, acquisirà colonne da ENTRAMBI i riferimenti alias di tabella.

Poiché la tua query sta eseguendo un OR sulle date, probabilmente otterrai anche un risultato cartesiano.

Ora conoscendo la struttura della tua tabella, ma potresti essere migliore con una query esplicita simile a...

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' 

Avere un indice sulla tua "mia_tabella" basato su (giorno, qualità) per ottimizzare la query. E puoi semplicemente continuare ad aggiungere in coppia le colonne che stai cercando di confrontare tra il giorno1 e il giorno2. T1 restituirà solo quelli associati al primo giorno e l'alias T2 verrà visualizzato solo per le voci corrispondenti per la seconda data.

Ora, se ci sono solo voci sul lato T1 senza una voce T2 corrispondente per la qualità e la data in questione, ma vuoi comunque vederle, cambia semplicemente JOIN in un LEFT JOIN.