2010-10-03 67 views
6

問題是它確實返回一行。SQL:錯誤:用作表達式的子查詢返回多於一行

這是事情。

SELECT... 

FROM... 

WHERE... 

GROUP BY... 

HAVING randomNumber > (SELECT value FROM.....) 

每當我有像= =>這樣的符號時,它總是給我返回這個錯誤。當我做IN時它沒有。

當與另一個表進行比較時,你不應該使用比較符號嗎?

+3

IN需要從subselect返回的1個或多個值。比較運算符只需要一個單一的返回值。你的問題在於你使用了來自subselect的多個結果的比較。 – 2010-10-03 05:17:05

回答

6

如果鍵入:

SomeValue IN (SELECT ...) 

它等同於使用:

SomeValue = ANY (SELECT ...) 

不要使用第二個符號 - 但它說明了一個點。當SELECT返回多個值時,必須在比較器中使用ANY或ALL。當您省略ANY或ALL時,您必須擁有一個只返回一個值的SELECT。

+0

爲什麼你不推薦使用'SomeValue = ANY(SELECT ...)'? – 2016-02-09 02:57:17

+0

因爲熟悉的拼寫是'SomeValue IN(SELECT ...)'。人們(認爲他們)知道這意味着什麼,而不去查看;如果你使用'= ANY',他們可能不得不認真想出相同的結論。否定的版本更加困難:'!= ANY'和'!= ALL'是真正的難題。 – 2016-02-09 04:18:36

0

您可以使用IN運算符指定多個值。如果您使用的是>, = , <等,請嘗試使用此:

HAVING randomNUmber > (SELECT MAX(value) FROM ......) 
相關問題