MySQL - Adhésion basée sur la date
Question
Est-il possible de joindre deux tables basées sur la même date sans tenir compte du temps?
Quelque chose comme:
... DE Rendez-vous LEFT JOIN sales ON appointments.date = sales.date ...
Le seul problème est qu’il s’agit d’un champ de date / heure, donc je veux être sûr qu’il ne regarde que la date et ignore le temps
La solution
Vous pouvez le faire comme ceci:
FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)
Mais je suis presque sûr qu'il ne pourra pas utiliser d'index, ce sera donc très lent.
Il vaudrait peut-être mieux ajouter une colonne de date à chaque tableau.
Autres conseils
La clause ON accepte une expression conditionnelle arbitraire. Vous pouvez donc effectuer la normalisation de la date des deux côtés avant de comparer, mais cela devrait représenter une pénalité de performance significative.
Oui, mais vous devez joindre une expression calculée, qui supprime l'heure des valeurs de la colonne datetime. Cela rendra la requête non-SARGable (elle ne peut pas utiliser d'index) et générera donc un scan de table ...
Je ne connais pas la syntaxe dans mysql pour supprimer le temps d'une valeur datetime, mais quoi que ce soit, écrivez simplement
FROM appointments a
LEFT JOIN sales s
ON StripTime(s.date) = StripTime(a.date)