簡體   English   中英

在mysql中使用右表的條件左連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM