SQL:错误:子查询作为表达式返回了多行

7
事实上,它确实返回了一行数据。 事情是这样的。
SELECT...

FROM...

WHERE...

GROUP BY...

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

每当我使用=、>等符号时,总是会返回这个错误。但如果我使用IN就不会有问题。
在与另一个表进行比较时,是否不能使用比较符号?

3
期待从子查询中返回一个或多个值。比较运算符只期待一个单一的返回值。您的问题在于您正在对来自子查询的多个结果进行比较。 - Sergey
2个回答

9
当你输入以下内容时:
SomeValue IN (SELECT ...)

这等同于使用:

SomeValue = ANY (SELECT ...)

不要使用第二种表示法 - 但它说明了一个问题。当SELECT返回多个值时,必须使用ANY或ALL与比较运算符一起使用。当省略ANY或ALL时,您必须有一个SELECT返回恰好一个值。


为什么您建议不要使用“SomeValue = ANY (SELECT ...)”? - Kevin Johnson
因为熟悉的拼写是 SomeValue IN (SELECT …)。人们(认为他们)知道这意味着什么,而不必查阅;如果您使用= ANY,他们可能必须费尽心思才能得出相同的结论。否定版本更难:!= ANY!= ALL真的很难理清楚。 - Jonathan Leffler
很惊讶地发现在SO上很难找到有人提到使用IN而不是=来避免这个错误。谢谢! - denis.peplin

0

您可以使用IN运算符指定多个值。如果您正在使用>, = , <等运算符,请尝试使用以下方法:

HAVING randomNUmber > (SELECT MAX(value) FROM ......)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接