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

SQL Self-join med datasammenligning for forskellige dage

Du får duplikerede kolonner, fordi som du har det, forespørger du fra T1 OG T2. Så medmindre du udtrykkeligt siger vis mig kun T1.*, vil det fange kolonner fra BEGGE tabelaliasreferencer.

Da din forespørgsel laver en OR på datoerne, vil du sandsynligvis også få et kartesisk resultat.

Nu kender du din tabelstruktur, men du er måske bedre med en eksplicit forespørgsel, noget som...

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' 

Hav et indeks på din "my_table" baseret på (dag, kvalitet) for at optimere forespørgslen. Og du kan bare fortsætte med at tilføje parvis, de kolonner, du forsøger at sammenligne mellem dag1 og dag2. T1 returnerer kun dem, der er knyttet til den første dag, og T2-aliaset vises kun for matchende poster for den anden dato.

Nu, hvis der kun er poster på T1-siden uden en tilsvarende T2-indgang for den pågældende kvalitet og dato, men du stadig vil se dem, så skal du bare ændre JOIN til en LEFT JOIN.




  1. Begræns heltalsværdi for mysqls kolonne

  2. Vinduesfunktioner - Løbende total med nulstilling

  3. MySQL Deltag i flere rækker som kolonner

  4. Hvor logges SQL Server-forbindelsesforsøg?