2016-08-16 100 views
-3

这是我的查询,但显示的结果是错误的。SQL IN()无法正常工作

SELECT winner 
FROM nobel 
WHERE 
    subject = 'Economics' AND 
    yr IN (
    SELECT min('yr') 
    FROM nobel 
    WHERE subject = 'Economics' 
); 
+1

显示我们**样本数据**,告诉我们其实选择什么变,并解释为什么* *这是“错误的” ..... –

回答

3

我相信这个问题是包裹yrMIN(),这使得优化器地址里给出的报价为这会导致它被评价为MIN(constant_value)这始终是constant_value一个字符串。

尝试:

SELECT winner FROM nobel 
WHERE subject='Economics' 
     AND yr IN (SELECT min(yr) FROM nobel WHERE subject='Economics'); 
+0

是的,非常感谢!我犯了一个小错误...谢谢你的回答! – porkie

1

的问题是围绕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优化器的一个重要区别。

+0

是的,非常感谢!我犯了一个小错误...谢谢你的回答!我尝试使用'='而不是'IN',结果也是正确的,但是它显示了两行,因为有两个赢家。所以也许你说'='说,最多只有一行正在返回“hava错误或我误解? – porkie

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