sql >> Database >  >> RDS >> Mysql

left join met voorwaarde voor rechtertabel in mysql

Uitgaande van PRICES.date is een DATETIME-gegevenstype, gebruik:

   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

Ik heb de DATE-functie om het tijdgedeelte te verwijderen, omdat CURRENT_DATE zal het tijdgedeelte niet bevatten, terwijl DATETIME-records dat wel zullen doen.

In dit voorbeeld is de date criteria worden vóór . toegepast de JOIN is gemaakt. Het is als een afgeleide tabel, waarbij de informatie wordt weggefilterd voordat de JOIN wordt gemaakt -- die andere resultaten zal opleveren dan wanneer de criteria waren opgegeven in de WHERE-component.

Om de lijst met producten en prijzen voor morgen te krijgen, gebruik:

   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)

Referentie:

Als u zowel de prijzen van vandaag als morgen in één zoekopdracht wilt, gebruikt u:

   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. Hoe de laatste 7 dagen te krijgen met PHP

  2. apache mysql - pakketten niet in orde op 3306

  3. max(length(field)) in mysql

  4. Wijzig de gegevens van één cel in mysql