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

Tin*_*iny 0 mysql sql exists subquery

使用以下查询,

SELECT * 
FROM   product 
WHERE  sale_price IN(SELECT max(sale_price)
                     FROM   product)
Run Code Online (Sandbox Code Playgroud)

返回指定 tablesale_price中 type 列中具有最大值的行。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) 
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 5

您误解了EXISTS运算符:它TRUEproduct子查询返回至少一行的每一行返回(您的子查询对每一行都这样做,因为如果至少有一行,则 aMAX(...)将返回一些内容)。

要重写查询,EXISTS您需要检查是否不存在具有更高销售价格的商品,如下所示:

SELECT * 
FROM  product p 
WHERE NOT EXISTS (
    SELECT *
    FROM   product pp 
    WHERE  p.sale_price < pp.sale_price
)
Run Code Online (Sandbox Code Playgroud)

这里的逻辑是,如果不存在产品pp具有较高sale_price的话p一定是最高的一款产品sale_price