20

看似简单的 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

我如何还返回该最低价格的相应价格。id?谢谢!

4

4 回答 4

33

如果有多个最低价格的价格记录,这将返回 Items 中记录的多个记录:

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
    )
);
于 2011-09-28T19:22:33.030 回答
15

新的工作答案,基于 MySQL 5.0 参考手册 - 3.6.4 中的最后一个示例。保持某一列的分组最大值的行

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
于 2011-09-28T19:07:22.140 回答
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)  
于 2011-09-28T19:02:44.673 回答
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 
于 2011-09-28T19:11:41.933 回答