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

War es hilfreich?

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 ...

erzeugen

Ich 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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top