https://sqlzoo.net/wiki/Nobel_Quiz
有问题的表格显示在页面顶部。
问题3的两个答案选择:“选择显示未授予医学奖的年份的代码”:
SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr IN (SELECT DISTINCT yr FROM nobel WHERE subject <> 'Medicine')
和
SELECT COUNT(DISTINCT yr) FROM nobel
WHERE yr NOT IN (SELECT DISTINCT yr FROM nobel WHERE subject = 'Medicine')
SQLZoo仅将第二个选项作为正确答案,但是对我来说,这些答案看起来将返回相同的结果。有人可以提供一些关于为什么第一个选项不正确的见解吗?谢谢。
答案 0 :(得分:2)
第一个回答问题:
除医学以外的其他领域获得诺贝尔奖有多少年?
第二次尝试回答:
多少年没有诺贝尔医学奖?
这些是不同的问题,通常会有两个不同的答案。
还有其他重要区别。如果医学奖励中yr
的任何值为NULL,则第二个查询不返回任何行(这就是为什么我说“试图回答”)。 NULL
值对第一个查询没有这种全局影响。
SQL基于的基于集合的逻辑是合法逻辑。但这比处理基本的布尔表达式需要更多的思考。