n個

2016-04-14 14 views
2

私はn個

list_Name 
A1 
A2 
A3 
A4 

別のテーブルdestは内の値を使用して、長い文字列

ID String 
1 A1 This is line 1 A2 
2 A3 Line number 2 
3 A5 Line 3 

を持つ列が含まれているようなレコードのリストを表listを持っていると仮定listテーブル、レコードを見つけたいdestテーブル

私が知っているのは、それらを1つずつ取り出すことです。例 -

SELECT * FROM dest WHERE string LIKE '%A1%' OR string LIKE '%A2%' 

しかし、どのように私はlistテーブル内のすべての値に対してLIKEを使用することができますか?

listテーブルはn個のレコードを持つことができます。

答えて

2

JOIN/EXISTSを使用すると、LISTテーブルのすべての値をチェックできます。

私は通常、存在を確認するためにEXISTSを好んでいます。

SELECT * 
FROM dest d 
WHERE exists (select 1 from list l where d.string LIKE '%'+list_Name+'%') 

我々はまあ、私はトリガーでこれを使用している明示的な照合に

SELECT * 
FROM dest d 
WHERE EXISTS (SELECT 1 
       FROM list l 
       WHERE d.string COLLATE database_default LIKE 
         '%' + list_name + '%' COLLATE database_default) 
+0

を使用することができます照合順序の競合を解決するには。トリガーが働いたかどうかは不明です。レコードを挿入した後、「Latin1_General_CI_AI」と「SQL_Latin1_General_CP1_CI_AS」の照合の競合を同様の操作で解決できないというエラーが表示されます。 – kamalpreet

+1

@kamalpreet - 'string'と' list_Name'には2つの異なる照合順序があります。明示的な照合を使用してこれを解決できます –

+0

私の場合、 'string'値は非常に長いテキストです。一致が見つかったときにトリガで、そのクエリを処理するのに約15秒かかります。どのようなアイデアを最適化するには? – kamalpreet

関連する問題