2

对于 SQL 中的表,我有以下架构。

Owner (ownerid, name, phone, age)

我被要求在不使用任何聚合函数(例如 MAX)的情况下编写一个语句来查找数据库中最旧的所有者。我也不允许使用任何特定于任何 DBMS 的东西。

谢谢你的帮助。

4

3 回答 3

3

您可以使用EXISTS运算符,这是所有符合 SQL 的 RDBMS 的标准:

SELECT age
FROM Owner o1
WHERE NOT EXISTS (SELECT 1 FROM Owner o2 WHERE o2.age > o1.age)

这个查询背后的想法是不言自明的:最旧的所有者是这样一个所有者o1,即没有其他所有者o2o2更老o1

于 2013-03-24T20:27:33.520 回答
0

另一种选择是使用 ALL 运算符:

select o1.*
from "owner" o1
where age > all (select age 
                 from "owner" o2
                 where o2.ownerid <> o1.ownerid);

它基本上找到年龄大于所有年龄值的所有者,除了我们正在查看的那个。

于 2019-05-11T18:30:29.510 回答
0

您还可以使用NOT INJOIN运算符,这是所有 SQL 投诉 RDMS 的标准。

select age from owner where age not in (select o2.age from owner as o1 JOIN owner as o2 ON o1.age > o2.age);
于 2019-05-11T18:23:54.340 回答