我在SQL中有一个表的以下模式。
Owner (ownerid, name, phone, age)
我被要求写一个语句来查找数据库中最老的所有者,而不使用任何聚合函数,如MAX。我也不允许使用任何特定于任何DBMS的东西。
感谢您的帮助。
答案 0 :(得分:2)
您可以使用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
}。
答案 1 :(得分:0)
您还可以使用 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);
答案 2 :(得分:0)
另一种选择是使用ALL运算符:
select o1.*
from "owner" o1
where age > all (select age
from "owner" o2
where o2.ownerid <> o1.ownerid);
本质上,它会找到年龄大于所有年龄值的所有者(除了我们正在寻找的年龄之外)。