子查询使用IN和ISNULL命令返回多个值

时间:2014-07-07 19:21:16

标签: sql

我需要帮助运行SQL查询我收到此错误

  

子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。

这是我试图运行的查询:

select * 
from [Group] 
where [Group].Name IN (ISNULL((Select * from Split(@AdGroups)), [Group].Name))

编辑:

如果@AdGroupsNULL,我需要Group表中的所有行,但如果其中有任何名称,我需要只包含这些名称的行。

2 个答案:

答案 0 :(得分:1)

问题是Select * from Split(@AdGroups)返回多行。此子查询用作ISNULL的参数。 ISNULL只接受一个值,检查它是否为null,如果第一个值为null,则返回第二个值。它无法处理多个值。

我不相信你需要的是null。

select * from [Group] where [Group].Name IN ( * from Split(@AdGroups))

如果此查询未提供所需结果,请在修改问题时显示错误的结果和所需的结果。

答案 1 :(得分:0)

isnull()逻辑移动到子查询中:

select *
from [Group] g
where g.Name IN (Select coalesce(t.name, g.Name)
                 from Split(@AdGroups)) as t(name)
                )