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'
    );