Mysql
 sql >> Baza danych >  >> RDS >> Mysql

left join z warunkiem dla prawej tabeli w mysql

Zakładając PRICES.date to typ danych DATETIME, użyj:

   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

Użyłem funkcji DATA aby usunąć część czasu, ponieważ CURRENT_DATE nie będzie zawierał części czasu, podczas gdy rekordy DATETIME będą.

W tym przykładzie date kryteria są stosowane przed DOŁĄCZENIE jest wykonane. Przypomina ona tabelę pochodną, ​​filtrując informacje przed wykonaniem JOIN — co da inne wyniki niż w przypadku, gdy kryteria zostały określone w klauzuli WHERE.

Aby uzyskać listę produktów i cen na jutro, użyj:

   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)

Odniesienie:

Jeśli chcesz mieć zarówno dzisiejsze, jak i przyszłe ceny w jednym zapytaniu, użyj:

   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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Neo4j - Usuń związek za pomocą Cypher

  2. BŁĄD 1305 (42000):SAVEPOINT ... nie istnieje

  3. Mysql:modyfikacja w my.cnf nie działa

  4. MYSQL — pobieranie znaczników czasu między datami

  5. Jak przechowywać dane JSON w MySQL?