选择列包含子查询中任何结果的行

时间:2013-03-26 13:06:26

标签: sql sql-server-2008 tsql

如果有一个表使用分隔符包含一列连接数据,即11111_22222_33333(我知道这是不好的做法,但这是我必须使用的数据)

我需要编写一个查询,返回包含特定值22222的所有行,其中特定值是子查询的结果。

所以,我正在做的是......

SELECT * FROM myTable WHERE myColumn IN (SELECT [Name] FROM subTable)

这会运行,但不会返回任何结果,因为它特别匹配1111_2222_3333到2222.所以我需要的是使用LIKE或类似的方法

SELECT * FROM myTable WHERE myColumn LIKE (SELECT [NAME] FROM subTable)

给出错误

Msg 512, Level 16, State 1, Line 1
Subquery returned more than 1 value. This is not permitted when the subquery follows 
=, !=, <, <=       , >, >= or when the subquery is used as an expression.

请问如何实现?我正在使用Sql Server 2008 R2进行开发,但该解决方案还需要与Server 2005兼容

3 个答案:

答案 0 :(得分:1)

你的子查询返回多个值,LIKE不能用于子查询,你需要使用的是EXISTS这里试试这个

SELECT * FROM myTable a 
WHERE EXISTS  (SELECT 1 FROM subTable b
               WHERE a.myColumn LIKE '%' + b.[NAME] + '%')

答案 1 :(得分:1)

SELECT 
    t1.* 
FROM myTable t1
join (
    SELECT distinct [Name] FROM subTable
) x
on t1.myColumn like '%' + x.[name] + '%'

答案 2 :(得分:0)

您可以使用带有JOIN子句的LIKE来获得结果:

select *
from mytable t
inner join subtable s
   on t.mycolumn like '%'+s.name+'%'

请参阅SQL Fiddle with Demo