Mysql
 sql >> Baza danych >  >> RDS >> Mysql

SQL Self-join z porównaniem danych z różnych dni

Otrzymujesz zduplikowane kolumny, ponieważ tak jak masz, wysyłasz zapytania z T1 i T2. Więc jeśli wyraźnie nie powiesz pokaż mi tylko T1.*, pobierze kolumny z OBU odniesień do aliasów tabeli.

Ponieważ Twoje zapytanie składa się z OR w datach, prawdopodobnie otrzymasz również wynik kartezjański.

Znasz teraz strukturę tabeli, ale możesz być lepszy z jawnym zapytaniem, takim jak...

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' 

Miej indeks w swojej "moja_tabela" na podstawie (dzień, jakość), aby zoptymalizować zapytanie. Możesz po prostu dodawać w parach kolumny, które próbujesz porównywać między dniem 1 a dniem 2. T1 zwróci tylko te powiązane z pierwszym dniem, a alias T2 będzie wyświetlany tylko dla pasujących wpisów z drugiej daty.

Teraz, jeśli są tylko wpisy po stronie T1 bez odpowiadającego im wpisu T2 dla danej jakości i daty, ale nadal chcesz je zobaczyć, po prostu zmień JOIN na LEFT JOIN.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wysyłanie danych z Reacta do MySQL

  2. Klauzula równoważna MySQL ONLY IN()

  3. Laravel SQLSTATE[22007]:Nieprawidłowy format daty i godziny:1292 Nieprawidłowa wartość daty i godziny:„2019-03-10 02:00:39” dla kolumny „updated_at” (czas letni?)

  4. Jak używać MySQL Found_Rows() w PHP?

  5. Mysql:programowo usuń wszystkie klucze obce