这是我的查询,但显示的结果是错误的。SQL IN()无法正常工作
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min('yr')
FROM nobel
WHERE subject = 'Economics'
);
这是我的查询,但显示的结果是错误的。SQL IN()无法正常工作
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min('yr')
FROM nobel
WHERE subject = 'Economics'
);
我相信这个问题是包裹yr
的MIN()
,这使得优化器地址里给出的报价为这会导致它被评价为MIN(constant_value)
这始终是constant_value
一个字符串。
尝试:
SELECT winner FROM nobel
WHERE subject='Economics'
AND yr IN (SELECT min(yr) FROM nobel WHERE subject='Economics');
是的,非常感谢!我犯了一个小错误...谢谢你的回答! – porkie
的问题是围绕yr
单引号作为@sagi指出。我只是想指出的是,一个相关的条款是这样的查询与=
一起比较典型的:
SELECT n.winner
FROM nobel n
WHERE n.subject = 'Economics' AND
n.yr = (SELECT min(yr) FROM nobel n2 WHERE n2.subject = n.subject);
采用=
与in
这里看起来像一个小点给你。但是,=
表示最多返回一行,in
表示可能返回多行。这是SQL优化器的一个重要区别。
是的,非常感谢!我犯了一个小错误...谢谢你的回答!我尝试使用'='而不是'IN',结果也是正确的,但是它显示了两行,因为有两个赢家。所以也许你说'='说,最多只有一行正在返回“hava错误或我误解? – porkie
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min(yr) # ---> just remove quotes in your query, it will work
FROM nobel
WHERE subject = 'Economics'
);
显示我们**样本数据**,告诉我们其实选择什么变,并解释为什么* *这是“错误的” ..... –