WHERE IN和MIN的子查询

时间:2014-08-08 14:28:55

标签: mysql sql subquery

我有一个像:

这样的数组
$inQuery = (1, 2, 3,...)

我想从表格组合中获得具有最小价格值的文章。我的查询:

SELECT  *
        FROM portfolio p
        WHERE p.article_id IN ($inQuery) = (
           SELECT MIN(p.net_price)
           FROM portfolio p);
        AND p.state_id = (:state_id)

如何获得具有不同文章和最低价格的报名表组合?

1 个答案:

答案 0 :(得分:1)

如果你有关于net_price的索引(我假设你有因为col没有索引,那么Select MIN(p.net_price)会扫描整个表,那不好),那么我认为你应该做2个查询,这可能更好使用索引:

1. $minPrice= Select MIN(net_price) from portfolio;

2. SELECT  *
    FROM portfolio p
    WHERE p.article_id IN ($inQuery) AND net_price = $minPrice
    AND p.state_id = (:state_id)

如果你有覆盖索引(net_price,state_id,article_id),那就太棒了