2011-09-28 67 views
8

看似簡單的MySQL問題,但我從來沒有這樣做過..MySQL左加入+最小

我有兩個表,物品和價格,與一對多的關係。

Items Table 
id, name 

Prices Table 
id, item_id, price 

prices.item_id = items.id 

我到目前爲止有:

SELECT items.id, items.name, MIN(prices.price) 
FROM items 
LEFT JOIN prices ON items.id = prices.item_id 
GROUP BY items.id 

我怎麼也返回相應prices.id爲最低價格是多少?謝謝!

+1

http://dev.mysql.com/doc/refman/5.0/en/example-maximum-column-group-row.html – Karolis

回答

15

這將返回多個記錄中的項目記錄,如果有多個價格記錄它的最低價格:

select items.id, items.name, prices.price, prices.id 
from items 
left join prices on (
    items.id = prices.item_id 
    and prices.price = (
     select min(price) 
     from prices 
     where item_id = items.id 
    ) 
); 
+0

輝煌,謝謝。我越來越接近這個...知道我需要一個子查詢的地方。 – Charles

+0

這是我正在努力取代我的答案,但帕特里克擊敗了我。 – Sonny

+2

這是如何實現一個類似的查詢效率,並殺死我的加載時間,即使有各種指標等 – Horse

0

好的,怎麼樣?

SELECT items.id, items.name, MIN(prices.price), prices.id 
FROM items 
LEFT JOIN prices ON items.id = prices.item_id 
GROUP BY items.id, MIN(prices.price) 
+0

當我這樣做時,它返回第一個pri ces.id找到它,而不是與最小值對應的那個。 – Charles

+2

似乎沒有工作 – Charles

9

新,工作答案的基礎上,最後一個例子中的MySQL 5.0參考手冊 - 3.6.4. The Rows Holding the Group-wise Maximum of a Certain Column

SELECT items.id, items.name, prices.price, prices.id 
FROM items 
LEFT JOIN prices 
    ON prices.item_id = items.id 
LEFT JOIN prices AS filter 
    ON filter.item_id = prices.item_id 
    AND filter.price < prices.price 
WHERE filter.id IS NULL 

LEFT JOIN工作的基礎上,當prices.price是在其最小值,有否filter.price具有較小的值,並且filter行值將爲NULL。


原件不正確的答案:

SELECT items.id, items.name, prices.price, prices.id 
FROM items 
LEFT JOIN prices ON prices.item_id = items.id 
ORDER BY prices.price ASC 
LIMIT 1 
+1

我試圖在項目表中顯示所有結果。此處的LIMIT 1應用於主Items查詢,並僅返回一個結果。 – Charles

0
SELECT top 1 items.id, items.name, prices.price, prices.id 
FROM items 
LEFT JOIN prices ON items.id = prices.item_id 
ORDER BY prices.price ASC