sql >> Databáze >  >> RDS >> Mysql

SQL Self-join s porovnáním dat pro různé dny

Získáváte duplicitní sloupce, protože jak to máte, dotazujete se z T1 A T2. Pokud tedy výslovně neřeknete ukázat mi pouze T1.*, převezme sloupce z OBOU odkazů na alias tabulky.

Vzhledem k tomu, že váš dotaz provádí OR pro data, pravděpodobně také dostanete kartézský výsledek.

Nyní znáte strukturu své tabulky, ale možná byste byli lepší s explicitním dotazem, například...

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' 

Pro optimalizaci dotazu mějte index ve své "my_table" na základě (den, kvalita). Sloupce, které se snažíte porovnat, můžete jednoduše přidávat do párů mezi dnem 1 a dnem 2. T1 vrátí pouze ty přidružené k prvnímu dni a alias T2 se zobrazí pouze u odpovídajících záznamů pro druhý den.

Nyní, pokud jsou na straně T1 pouze záznamy bez odpovídajících záznamů T2 pro danou kvalitu a datum, ale přesto je chcete vidět, změňte JOIN na LEVÝ JOIN.




  1. Laravel Eloquent získá výsledky seskupené podle dnů

  2. Jak vrátit výsledek SELECT uvnitř funkce v PostgreSQL?

  3. Jak načtu Individual Div bez načtení celé stránky a zobrazení stavu načítání?

  4. Práce s MyISAM v MySQL