Mysql
 sql >> Base de données >  >> RDS >> Mysql

jointure gauche avec condition pour la table de droite dans mysql

En supposant PRICES.date est un type de données DATETIME, utilisez :

   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

J'ai utilisé la fonction DATE pour supprimer la partie horaire, car CURRENT_DATE n'inclura pas la partie heure alors que les enregistrements DATETIME le feront.

Dans cet exemple, la date les critères sont appliqués avant le JOIN est fait. C'est comme une table dérivée, filtrant les informations avant que le JOIN ne soit fait - ce qui produira des résultats différents que si les critères étaient spécifiés dans la clause WHERE.

Pour obtenir la liste des produits et les prix de demain, utilisez :

   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)

Référence :

Si vous voulez les prix d'aujourd'hui et de demain dans une seule requête, utilisez :

   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)