1

如果有一个包含使用分隔符的连接数据列的表,即 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

4

3 回答 3

2

您的子查询返回多个值,并且 LIKE 不适用于子查询,您需要使用的是 EXISTS 这里试试这个

SELECT * FROM myTable a 
WHERE EXISTS  (SELECT 1 FROM subTable b
               WHERE a.myColumn LIKE '%' + b.[NAME] + '%')
于 2013-03-26T13:09:01.930 回答
1
SELECT 
    t1.* 
FROM myTable t1
join (
    SELECT distinct [Name] FROM subTable
) x
on t1.myColumn like '%' + x.[name] + '%'
于 2013-03-26T13:10:08.423 回答
0

您可以使用JOINwithLIKE子句来获得结果:

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

请参阅带有演示的 SQL Fiddle

于 2013-03-26T13:10:50.603 回答