Sie erhalten doppelte Spalten, weil Sie, wie Sie es haben, von T1 UND T2 abfragen. Wenn Sie also nicht ausdrücklich sagen, nur T1.* anzuzeigen, werden Spalten aus BEIDEN Tabellen-Alias-Referenzen abgerufen.
Da Ihre Abfrage ein ODER an den Daten durchführt, erhalten Sie wahrscheinlich auch ein kartesisches Ergebnis.
Jetzt kennen Sie Ihre Tabellenstruktur, aber Sie könnten besser mit einer expliziten Abfrage wie etwa ...
seinSELECT
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'
Haben Sie einen Index für Ihre "my_table" basierend auf (Tag, Qualität), um die Abfrage zu optimieren. Und Sie können die Spalten, die Sie zwischen Tag1 und Tag2 vergleichen möchten, einfach paarweise hinzufügen. T1 gibt nur diejenigen zurück, die dem ersten Tag zugeordnet sind, und der T2-Alias wird nur für übereinstimmende Einträge für das zweite Datum angezeigt.
Wenn nun nur Einträge auf der T1-Seite ohne entsprechenden T2-Eintrag für die fragliche Qualität und das betreffende Datum vorhanden sind, Sie diese aber trotzdem sehen möchten, dann ändern Sie einfach den JOIN in einen LEFT JOIN.