Domanda

È possibile unire due tabelle in base alla stessa data, senza factoring in tempo?

Qualcosa del tipo:

  

... DA appuntamenti LEFT JOIN sales ON   appuntamenti.date = sales.date ...

L'unico problema è che si tratta di un campo data / ora, quindi voglio assicurarmi che guardi solo la data e ignori l'ora

È stato utile?

Soluzione

Puoi farlo in questo modo:

FROM appointments
LEFT JOIN sales ON DATE(appointments.date) = DATE(sales.date)

Ma sono abbastanza sicuro che non sarà in grado di utilizzare un indice, quindi sarà molto lento.

Potrebbe essere meglio aggiungere una colonna di date a ciascuna tabella.

Altri suggerimenti

la clausola ON accetta un'espressione condizionale arbitraria, quindi è possibile eseguire la normalizzazione della data in entrambe le parti prima del confronto, ma dovrebbe rappresentare una penalità significativa per le prestazioni.

Sì, ma devi unirti a un'espressione calcolata, che rimuove il tempo dai valori della colonna datetime. Ciò renderà la query non SARGable (non può utilizzare un indice), quindi genererà una scansione della tabella ...

Non conosco la sintassi in mysql per togliere il tempo da un valore datetime, ma qualunque cosa sia, basta scrivere

   FROM appointments a 
      LEFT JOIN sales s 
         ON StripTime(s.date) = StripTime(a.date)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top