对于 SQL 中的表,我有以下架构。
Owner (ownerid, name, phone, age)
我被要求在不使用任何聚合函数(例如 MAX)的情况下编写一个语句来查找数据库中最旧的所有者。我也不允许使用任何特定于任何 DBMS 的东西。
谢谢你的帮助。
您可以使用EXISTS
运算符,这是所有符合 SQL 的 RDBMS 的标准:
SELECT age
FROM Owner o1
WHERE NOT EXISTS (SELECT 1 FROM Owner o2 WHERE o2.age > o1.age)
这个查询背后的想法是不言自明的:最旧的所有者是这样一个所有者o1
,即没有其他所有者o2
比o2
更老o1
。
另一种选择是使用 ALL 运算符:
select o1.*
from "owner" o1
where age > all (select age
from "owner" o2
where o2.ownerid <> o1.ownerid);
它基本上找到年龄大于所有年龄值的所有者,除了我们正在查看的那个。
您还可以使用NOT IN和JOIN运算符,这是所有 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);