[英]left join with condition for right table in mysql
我一直試圖繞過這個問題,但我沒有取得多大進展。 我的目標是在兩個表之間進行左連接,並使用右表的標准。 我想查看當天所有產品和價格的清單,即使當天沒有定價行。 以下是代碼示例:
SELECT products.id, products.name, prices.price
FROM products LEFT JOIN prices
ON products.id = prices.id
WHERE prices.date = CURRENT_DATE
這僅生成具有當前日期的價格信息的產品。
好的,這只是我問題的第一部分。 我最終還想把CURRENT_DATE + INTERVAL 1天的價格拉下來。
任何信息將不勝感激。
假設PRICES.date
是DATETIME數據類型,請使用:
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
我使用DATE函數刪除時間部分,因為CURRENT_DATE
將不包括DATETIME記錄時的時間部分。
在此示例中,在JOIN生成之前應用date
條件。 它就像一個派生表,在JOIN生成之前過濾掉信息 - 這將產生與WHERE子句中指定條件不同的結果。
要獲取明天的產品和價格清單,請使用:
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)
參考:
如果您想在單個查詢中同時獲得今天和明天的價格,請使用:
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)
上面的答案很強 添加到OMG Ponies的回復...在原始WHERE語句中具有'right'表標准基本上將LEFT OUTER JOIN轉換為INNER JOIN。 只是以不同的方式看待它可能會有所幫助。
SELECT id,
name,
(SELECT price
FROM prices
WHERE id = products.id
AND prices.date = CURRENT_DATE
) AS price,
(SELECT price
FROM prices
WHERE id = products.id
AND prices.date = DATE_ADD(CURRENT_DATE, INTERVAL 1 DAY)
) AS price_tomorrow
FROM products
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.