有没有办法用“(not)in”而不是“not exists”重写这个sql查询?

qnzebej0  于 2021-07-29  发布在  Java
关注(0)|答案(3)|浏览(378)

任务是编写一个sql查询,返回有史以来第一位就职总统。表中使用的两个属性 administration 应该不言自明。在这里你可以看到我的解决方案,我有信心是正确的。

SELECT A1.pres_name, A1.year_inaugurated
FROM administration A1
WHERE NOT EXISTS
    (SELECT NULL
     FROM administration A2
     WHERE A1.year_inaugurated > A2.year_inaugurated);

当我试图学习sql时,我想到了任何其他方法来编写这个查询,但是找不到任何方法。有没有其他解决方案不用 NOT EXISTS ? 而是使用 IN , NOT IN , EXISTS ? 另一个限制是不使用 MIN 功能。如果有一种以上的解决方案 NOT EXISTS ,我很高兴看到他们从中学到最多的东西。

yduiuuwa

yduiuuwa1#

你不能真的用 NOT IN ,但可以使用标量子查询编写:

SELECT A1.pres_name, A1.year_inaugurated
FROM administration A1
WHERE A1.year_inaugurated = (SELECT MIN(A2.year_inaugurated)
                             FROM administration A2
                            );

或者——假设没有任何重复的年份——使用 ORDER BY 以及限制行数的方法:

SELECT A1.pres_name, A1.year_inaugurated
FROM administration A1
ORDER BY A1.year_inaugurated ASC
FETCH FIRST 1 ROW ONLY;
nwwlzxa7

nwwlzxa72#

另一种获得所需结果的方法是使用操作符 ALL :

SELECT pres_name, year_inaugurated
FROM administration
WHERE year_inaugurated <= ALL (SELECT year_inaugurated FROM administration)
siv3szwd

siv3szwd3#

我想这差不多是戈登的第二个答案,但我不太熟悉 FETCH 在sql server中使用 top .

select top(1) a1.pres_name, a1.year_inaugurated
from administration a1
order by a1.year_inaugurated asc

相关问题