Mysql
 sql >> Base de données >  >> RDS >> Mysql

Auto-jointure SQL avec comparaison de données pour différents jours

Vous obtenez des colonnes en double car, comme vous l'avez, vous interrogez à partir de T1 ET T2. Donc, à moins que vous ne disiez explicitement de ne me montrer que T1.*, il récupérera les colonnes des DEUX références d'alias de table.

Puisque votre requête fait un OU sur les dates, vous obtiendrez probablement aussi un résultat cartésien.

Connaissant maintenant la structure de votre table, mais vous pourriez être mieux avec une requête explicite quelque chose comme...

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' 

Ayez un index sur votre "ma_table" basé sur (jour, qualité) pour optimiser la requête. Et vous pouvez simplement continuer à ajouter par paires, les colonnes que vous essayez de comparer entre jour1 et jour2. T1 ne renverra que ceux associés au premier jour, et l'alias T2 ne s'affichera que pour les entrées correspondantes pour la deuxième date.

Maintenant, s'il n'y a que des entrées du côté T1 sans entrée T2 correspondante pour la qualité et la date en question, mais que vous voulez toujours les voir, changez simplement le JOIN en LEFT JOIN.