sql >> Databasteknik >  >> RDS >> Mysql

left join med villkor för höger tabell i mysql

Förutsatt PRICES.date är en DATETIME-datatyp, använd:

   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

Jag använde DATE-funktionen för att ta bort tidsdelen, eftersom CURRENT_DATE kommer inte att inkludera tidsdelen medan DATETIME-poster kommer att göra det.

I det här exemplet, date kriterier tillämpas före JOIN görs. Det är som en härledd tabell, som filtrerar ner informationen innan JOIN görs -- vilket kommer att ge andra resultat än om kriterierna specificerades i WHERE-satsen.

För att få listan över produkter och priser för morgondagen, använd:

   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)

Referens:

Om du vill ha både dagens och morgondagens priser i en enda fråga, använd:

   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)


  1. MySQL/MariaDB TRIGGER

  2. Hur man hanterar en stor datamängd med Spring MySQL och RowCallbackHandler

  3. Hur man genererar FRD-spårning i Oracle Apps 11i/R12

  4. Få de tomma posterna med SQL