Mysql
 sql >> Database >  >> RDS >> Mysql

left join con condizione per la tabella destra in mysql

Supponendo PRICES.date è un tipo di dati DATETIME, utilizzare:

   SELECT pd.id, 
          pd.name, 
          pr.price
     FROM PRODUCTS pd
LEFT JOIN PRICES pr ON pr.id = pd.id
                   AND DATE(pr.date) = CURRENT_DATE

Ho usato la funzione DATA per rimuovere la parte temporale, perché CURRENT_DATE non includerà la parte temporale mentre i record DATETIME lo faranno.

In questo esempio, la date criteri vengono applicati prima il JIN è fatto. È come una tabella derivata, che filtra le informazioni prima che venga creato il JOIN, che produrrà risultati diversi rispetto a quelli se i criteri fossero specificati nella clausola WHERE.

Per ottenere l'elenco dei prodotti e dei prezzi di domani, utilizza:

   SELECT pd.id, 
          pd.name, 
          pr.price
     FROM PRODUCTS pd
LEFT JOIN PRICES pr ON pr.id = pd.id
                   AND DATE(pr.date) = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)

Riferimento:

Se desideri i prezzi di oggi e di domani in un'unica query, utilizza:

   SELECT pd.id, 
          pd.name, 
          pr1.price AS price_today,
          pr2.price AS price_tomorrow
     FROM PRODUCTS pd
LEFT JOIN PRICES pr1 ON pr1.id = pd.id
                   AND DATE(pr1.date) = CURRENT_DATE
LEFT JOIN PRICES pr2 ON pr2.id = pd.id
                   AND DATE(pr2.date) = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)