使用EXISTS获取给定列中具有最大值的行

时间:2014-04-25 15:38:22

标签: mysql sql subquery exists

使用以下查询

SELECT * 
FROM   product 
WHERE  sale_price IN(SELECT max(sale_price)
                     FROM   product)

在指定的表sale_price中的DECIMAL(35,2)类的product列中返回一个具有最大值的行。


可以使用可以返回相同结果的EXISTS()重写此查询 - product表中sale_price列中最大值的一行吗?

SELECT * 
FROM   product p 
WHERE  EXISTS(SELECT max(pp.sale_price) 
              FROM   product pp 
              WHERE  p.prod_id = pp.prod_id) 

重写这样的查询是不正确的,并根据匹配该表中每一行的条件返回给定表中的所有行。

1 个答案:

答案 0 :(得分:4)

您误解了EXISTS运算符:它为TRUE的每一行返回product,其中子查询返回至少一行(您的子查询为每一行执行的行,因为{ {1}}如果至少有一行,则会返回某些内容

要使用MAX(...)重写查询,您需要检查是否存在销售价格较高的商品,如下所示:

EXISTS

此处的逻辑是,如果不存在产品SELECT * FROM product p WHERE NOT EXISTS ( SELECT * FROM product pp WHERE p.sale_price < pp.sale_price ) pp更高的产品,那么sale_price必须是具有最高p的产品。