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.

これはどのように達成されますか?開発にSQLServer2008 R2を使用していますが、ソリューションはServer2005とも互換性がある必要があります

4

3 に答える 3

2

サブクエリが複数の値を返しているため、LIKEはサブクエリでは機能しません。使用する必要があるのは、ここに存在するものです。これを試してください

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 FiddlewithDemoを参照してください

于 2013-03-26T13:10:50.603 に答える