2010-10-23 28 views
7

我一直試圖圍繞這個問題包裹我的頭,但我沒有取得很大進展。我的目標是在兩個表格之間進行左連接,併爲右表創建條件。我希望看到當天所有產品和價格的列表,即使當前沒有定價行。下面是代碼示例:左加入條件爲右表在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天的價格也提高。

任何信息將不勝感激。

回答

9

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 function去除時間部分,因爲CURRENT_DATE將不包括時間部分,而DATETIME記錄將。

在此示例中,正在應用date標準之前 JOIN進行。它就像一個派生表,在建立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) 
+0

今天學到了新東西:) – almaruf 2015-08-11 09:21:07

1
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 
5

上面的強答案。添加到OMG Ponies的回覆中......在原始WHERE語句中使用'正確'表格標準基本上將LEFT OUTER JOIN變成INNER JOIN。只是以不同的方式看待它可能會有所幫助。