如果有一个表使用分隔符包含一列连接数据,即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兼容
答案 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+'%'