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

venstre join med betingelse for højre tabel i mysql

Forudsat PRICES.date er en DATETIME-datatype, brug:

   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

Jeg brugte DATE-funktionen for at fjerne tidsdelen, fordi CURRENT_DATE vil ikke inkludere tidsdelen, mens DATETIME-registreringer vil.

I dette eksempel er date kriterier anvendes før JOIN er lavet. Det er som en afledt tabel, der filtrerer oplysningerne ned, før JOIN'et laves - hvilket vil give andre resultater, end hvis kriterierne var specificeret i WHERE-sætningen.

For at få listen over produkter og priser for i morgen, brug:

   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)

Reference:

Hvis du ønsker både dagens og morgendagens priser i en enkelt forespørgsel, skal du bruge:

   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. Opret et indeks på en enorm MySQL-produktionstabel uden tabellåsning

  2. MySql:Vis kolonner, men ekskluder alt undtagen feltnavnene

  3. World Backup Day:4 interessante datatabsfakta at vide

  4. Del 1:Billedklassificering med MariaDB Server og TensorFlow – en oversigt