2016-08-16 125 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' 
    );