查询错误“子查询返回的值超过1 ...”不应该“IN”解决这个问题吗?

时间:2013-01-08 22:29:42

标签: subquery

我以前在这里得到了很大的帮助,所以我希望有人可以帮我解决这个问题。任何人都可以告诉我为什么查询#1导致错误“子查询返回超过1个值...”但查询#2工作正常?由于我使用“IN”代替“=”来限定结果,我认为多个值是可以接受的。

关于如何实现这一目标的任何建议?

--Query #1
SELECT _Column1_ from _View1_
WHERE
_Column2_ IN( CASE
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN (
SELECT  _Column2_
FROM    _Table1_
WHERE   _Column2_ = CONVERT(Int, LEFT(1000110, 4))
OR      _Column3_ = CONVERT(Int, LEFT(1000110, 4))
)
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)

注意:在最终查询中,1000110实际上是一个用户名变量,可以返回数字用户名或字母数字

--Query #2
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) > 3
THEN CONVERT(Int, LEFT(1000110, 4))
WHEN ISNUMERIC(1000110) = 1 AND LEN(1000110) <= 3
THEN 0
ELSE (SELECT _Column2_ from _Table1_)
END)

1 个答案:

答案 0 :(得分:2)

SELECT _Column2_ from _Table1_最有可能返回多个结果。在这种情况下,只允许一个值。

作为测试,请尝试SELECT TOP(1) _Column2_ from _Table1_