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)
像这样重写查询是不正确的,并根据与该表中每一行匹配的条件返回给定表中的所有行。
您误解了EXISTS运算符:它TRUE为product子查询返回至少一行的每一行返回(您的子查询对每一行都这样做,因为如果至少有一行,则 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。