所以我正在解决互动教程http://www.sqlzoo.net/wiki/SELECT_from_Nobel_Tutorial 然而奖金部分没有解决方案。
以下是问题: 在哪些年份获得了物理奖,但没有获得化学奖。
SELECT yr FROM nobel
WHERE subject = 'Physics' AND yr NOT IN
(SELECT yr FROM nobel WHERE subject = 'Literature')
我得到了输出
1943
1935
1918
1914
当教程说答案是
时1933
1924
1919
1917
我不明白为什么我的解决方案是错误的
编辑:我看到了'文学'应该是化学'但它似乎仍然无效答案 0 :(得分:1)
在哪些年份获得了物理奖,但没有获得化学奖。
:)再次阅读你的任务......
WHERE subject ='Physics'和yr NOT IN (选择来自诺贝尔奖的主题='文学')
答案 1 :(得分:1)
您的查询中有两个错误:
Chemistry
(您的查询改为Literature
)distinct
结果以下是您修改过的查询:
SELECT DISTINCT yr
FROM nobel
WHERE subject = 'Physics' AND yr NOT IN
(SELECT yr FROM nobel WHERE subject = 'Chemistry')
DISTINCT
很重要,因为在1933年,物理奖授予了多位获奖者 - 即狄拉克和薛定谔。表中的这两行在输出中产生两个1933条目,这是您不想要的。
答案 2 :(得分:1)
我想注意那个"警告"关于这个问题是不正确的。您可以使用group by
和having
子句执行此操作:
select n.yr
from nobel n
group by n.yr
having sum(n.subject = 'Physics' ) > 0 and
sum(n.subject = 'Chemistry' ) = 0;
我猜这时,教程还没有引入group by
,having
,或者使用布尔结果作为整数。但是,您不需要join
或子查询来执行此操作。
答案 3 :(得分:1)
SELECT DISTINCT x.yr
FROM nobel x
LEFT
JOIN nobel y
ON y.yr = x.yr
AND y.subject = 'chemistry'
WHERE x.subject = 'physics'
AND y.yr IS NULL;