【发布时间】:2014-07-16 10:16:16
【问题描述】:
我在 MySQL 数据库中有一个表,即weight。可以在下面的快照中查看。
weight 表:
:
我需要以下查询。
SELECT *
FROM weight w
WHERE w.weight_id IN (SELECT MAX(ww.weight_id)
FROM weight ww
WHERE ww.weight BETWEEN 0 AND 60);
从weight 列的值介于0 到60 之间的行中(例如)从weight 表中获取最大行。
我想要使用EXISTS() 进行相同的查询。以下尝试不成功。
SELECT *
FROM weight w
WHERE NOT EXISTS (SELECT 1
FROM weight ww
WHERE w.weight_id < ww.weight_id
AND ww.weight BETWEEN 0 AND 60);
它返回从最大行开始的所有行(如果BETWEEN 条件(AND ww.weight BETWEEN 0 AND 60)被省略,它会从表中的所有行中返回一个最大值,但这是不受欢迎的。它应该返回一个最大行根据BETWEEN 条件应用过滤器后)。
稍作修改的版本不返回任何行。
SELECT *
FROM weight w
WHERE EXISTS (SELECT 1
FROM weight ww
WHERE w.weight_id = ww.weight_id
AND ww.weight BETWEEN 0 AND 60
AND NOT EXISTS(SELECT 1
FROM weight www
WHERE ww.weight_id < www.weight_id))
我还有其他方法可以使用EXISTS()吗?
我正在使用一个 ORM 框架,其中 FROM 子句不支持子查询。因此,如果排除FROM 中的子查询会好得多。
【问题讨论】: