使用以下查询
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)
重写这样的查询是不正确的,并根据匹配该表中每一行的条件返回给定表中的所有行。
答案 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
的产品。