Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Left Join mit Bedingung für rechte Tabelle in MySQL

Angenommen PRICES.date ein DATETIME-Datentyp ist, verwenden Sie:

   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

Ich habe die DATE-Funktion um den Zeitteil zu entfernen, weil CURRENT_DATE enthält den Zeitteil nicht, während DATETIME-Datensätze dies tun.

In diesem Beispiel das date Kriterien vorher angewendet wird Der JOIN wird erstellt. Es ist wie eine abgeleitete Tabelle, die die Informationen herunterfiltert, bevor der JOIN erstellt wird – was zu anderen Ergebnissen führt, als wenn die Kriterien in der WHERE-Klausel angegeben wären.

Um die Liste der Produkte und Preise für morgen zu erhalten, verwenden Sie:

   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)

Referenz:

Wenn Sie sowohl die heutigen als auch die morgigen Preise in einer einzigen Abfrage wünschen, verwenden Sie:

   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)