有没有一种方法可以用“(NOT)IN”而不是“ NOT EXISTS”来重写此SQL查询?

时间:2020-07-03 18:48:02

标签: sql exists not-exists notin

任务是编写一个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的解决方案吗? 但是要使用INNOT INEXISTS吗? 另一个限制是不要使用MIN函数。 而且,如果有不使用NOT EXISTS的解决方案,我将很高兴看到他们都从中学到了很多。

3 个答案:

答案 0 :(得分:1)

您不能真正使用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;

答案 1 :(得分:1)

获得所需结果的另一种方法是与运算符ALL

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

答案 2 :(得分:1)

我认为这几乎是戈登的第二个答案,但是我对SQL Server中的FETCH并不熟悉,所以我会使用top

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