【发布时间】:2021-04-21 16:18:45
【问题描述】:
我想查询那些财富少于最富有的人一半财富的人。所以我想出了以下查询:
select P.name
from
(select sum(B.balance) / 2 as Balance
from Person P1, BankAccount B, AccountOf A
where P.id = A.person_id and A.account_id = B.id
group by P1.id) as X, Persons P, BankAccount B, AccountOf A
where
group by P.id
having sum(B.balance) < max(X.Balance)
有人可以向我解释我做错了什么吗,在我看来,正常查询中出了点问题,因为单独完成的子查询给出了正确的数量。
【问题讨论】:
-
ANSI-92 是采用显式
JOIN语法替换隐式连接(使用,) 的标准。那是非常接近30岁。请停止使用来自错误世纪的过时且容易出错的语法。这样做将帮助您在第一时间获得正确的查询,然后也更容易调试。 (例如,您在外部查询中有 no 连接谓词,如果您使用JOIN语法,这是不可能发生的意外。) -
@MatBailie 感谢您的回复。我正在通过我的大学学习。不过我会调查的,谢谢。