SQL IN()无法正常工作
这是我的查询,但显示的结果是错误的SQL IN()无法正常工作,sql,Sql,这是我的查询,但显示的结果是错误的 SELECT winner FROM nobel WHERE subject = 'Economics' AND yr IN ( SELECT min('yr') FROM nobel WHERE subject = 'Economics' ); 我认为问题在于将yr括在MIN()中的引号,这使得优化器将其作为字符串进行处理,从而使其计算为MIN(常量值),该值始终是常量值 尝试: 问题在于@sagi指出的yr周围的
SELECT winner
FROM nobel
WHERE
subject = 'Economics' AND
yr IN (
SELECT min('yr')
FROM nobel
WHERE subject = 'Economics'
);
我认为问题在于将
yr
括在MIN()
中的引号,这使得优化器将其作为字符串进行处理,从而使其计算为MIN(常量值)
,该值始终是常量值
尝试:
问题在于@sagi指出的
yr
周围的单引号。我只想指出,对于这样的查询,与=
一起使用的关联子句更为典型:
SELECT n.winner
FROM nobel n
WHERE n.subject = 'Economics' AND
n.yr = (SELECT min(yr) FROM nobel n2 WHERE n2.subject = n.subject);
在这里使用
=
与相比,在中使用似乎是一个次要问题。但是,=
表示最多返回一行,中的表示可以返回多行。这是SQL优化器的一个重要区别。向我们展示示例数据,向我们展示实际选择的内容,并解释为什么这是“错误的”……是的,非常感谢!我犯了一个小错误…谢谢你的回答!是的,非常感谢!我犯了一个小错误…谢谢你的回答!我试着用“=”而不是“IN”,结果也是正确的,但它显示了两行,因为有两个赢家。所以也许你说“=表示最多有一行被返回”有问题,或者我误解了??
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'
);
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'
);