2016-04-14 3 views
2

Предположим, у меня есть таблица list со списком записей, какп число LIKE в SQL заявление

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 стол, я хочу найти запись от dest стол

То, что я знаю, выбирает их один за другим. ПРИМЕР-

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

Но как я могу использовать LIKE для каждого значения в таблице list?

list таблица может иметь n количество записей.

ответ

2

Вы можете использовать JOIN/EXISTS для проверки каждого значения в таблице LIST.

Обычно я предпочитаю EXISTS для проверки наличия.

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

Для решения Collation конфликта мы можем использовать явный COLLATION

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 - В нем указано, что «строка» и «list_Name» имеют два разных «сортировки». Мы можем решить это, используя явное сопоставление –

+0

В моем случае значение 'string' - очень длинный текст. В триггере, когда найдено совпадение, для обработки этого запроса требуется около 15 секунд. Любая идея оптимизировать его? – kamalpreet

Смежные вопросы