MySQL SELECT MIN行的INNER JOINed表

时间:2012-02-03 13:15:53

标签: mysql inner-join

这就是我目前的情况(减少一点):

SELECT *, item_prices.price AS minPrice
    FROM items  
    LEFT JOIN item_details USING(item_id) 
    LEFT JOIN item_prices USING(item_id) 
WHERE 1=1
GROUP BY item_id;

我的问题是,item_prices可能会为每个项目匹配多行 - 我只想获得最小值为price的行。我一直在寻找类似问题的网站和网页,但我感觉有点偏离我的深度,有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

您应该使用查询:

SELECT *, MIN(item_prices.price) AS minPrice
    FROM items  
    LEFT JOIN item_details USING(item_id) 
    LEFT JOIN item_prices USING(item_id) 
WHERE 1=1
GROUP BY item_id;

答案 1 :(得分:1)

将您的联接替换为item_prices,并使用联接到子查询,该子查询获得每个项目的最低价格:

left join (select item_id, min(price) price group by item_id) minprice using (item_id)

我通常不使用MySQL,但我相信语法是有效的。可能需要调整。

答案 2 :(得分:1)

您可以使用子查询执行此操作,方法如下:

SELECT *, 
    (SELECT 
        MIN(item_price) 
     FROM 
        item_prices inner 
     WHERE inner.item_id = items.item_id) AS minPrice 
FROM items

GROUP BY item_id;