sql >> Databáze >  >> RDS >> Mysql

levé spojení s podmínkou pro pravou tabulku v mysql

Za předpokladu PRICES.date je datový typ DATETIME, použijte:

   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

Použil jsem funkci DATE odstranit časovou část, protože CURRENT_DATE nebude zahrnovat časovou část, zatímco záznamy DATETIME ano.

V tomto příkladu date kritéria jsou aplikována před je provedeno JOIN. Je to jako odvozená tabulka, která filtruje informace před provedením JOIN – což povede k jiným výsledkům, než kdyby byla kritéria specifikována v klauzuli WHERE.

Chcete-li získat seznam produktů a cen na zítra, použijte:

   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:

Pokud chcete v jednom dotazu jak dnešní, tak i zítřejší ceny, použijte:

   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. Migrujte z tradiční replikace na GTID

  2. Jak používat OR &AND v klauzuli WHERE v mysql

  3. SQL Server kontingenční tabulka s více sloupcovými agregacemi

  4. Vytváří MySQL Workbench automaticky indexy pro cizí klíče?