MySQL - Join basierend auf Datum
Frage
Ist es möglich, zwei Tabellen zu verknüpfen basiert auf dem gleichen Datum, nicht rechtzeitig Factoring?
So etwas wie:
... FROM Termine LEFT JOIN Verkäufe auf appointments.date = sales.date ...
Das einzige Problem ist es ein Datetime-Feld ist, so möchte ich sicherstellen, dass es nur an dem Datum suchen und Zeit zu ignorieren
Lösung
Sie können es tun, wie folgt:
FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)
Aber ich bin mir ziemlich sicher, dass es nicht in der Lage sein, einen Index zu verwenden, so wird sehr langsam sein.
Sie können besser dran, ein Datum Spalte jeder Tabelle hinzugefügt wird.
Andere Tipps
die ON-Klausel akzeptiert beliebigen bedingten Ausdruck, so dass Sie das Datum Normalisierung auf beiden Seiten vor dem Vergleich durchführen können, aber es sollte eine erhebliche Leistungseinbuße darstellen.
Ja, aber Sie haben auf einem berechneten Ausdruck zu verbinden, dass die Zeit der Datetime-Spalte Werte Streifen. Dadurch wird die Abfrage nicht-Sargable machen (Es kann nicht einen Index verwenden), so wird es ein Table-Scan ...
erzeugenIch weiß nicht, die Syntax in mysql Zeit von einem Datetime-Wert strippen, aber was auch immer es ist, schreiben Sie einfach
FROM appointments a
LEFT JOIN sales s
ON StripTime(s.date) = StripTime(a.date)