這是我的查詢,但顯示的結果是錯誤的。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'
);
顯示我們**樣本數據**,告訴我們其實選擇什麼變,並解釋爲什麼* *這是「錯誤的」 ..... –