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.