Запрос на соединение двух таблиц с оператором Like - PullRequest
0 голосов
/ 07 мая 2020

У меня есть две таблицы с данными, как показано ниже

Table1

+-----+-------+-------------------------+
| ID  | value |          Test           |
+-----+-------+-------------------------+
| 200 |  2456 | yyy xxcv zuio uio tzrue |
| 201 |  2905 | xxx tttt ssrt uio uioe  |
| 203 | 34567 | zzz iii ool uiol werts  |
| 204 |  2356 | xxx tttt ssrt uio wertz |
| 205 |  3478 | io ser xcv erto klop    |
| 206 |  4567 | xxx tttt ssrt uio poiu  |
| 207 |   234 | zzz iii ool uiol wert   |
+-----+-------+-------------------------+

Я хотел бы создать предложение where для получения строк с оператором like. например,

select *
from Table1
where test like '%xxcv zuio%' Or Like '%iii ool%' OR '%xcv erto%' OR '%ssrt uio%' OR '%uio uioe%'

Но моя проблема в том, что в предложении where есть более 15-20 различных параметров, он также может увеличивать последний.

Итак, я решил создать новый Таблица в базе данных позволяет назвать ее Table2 с параметром, как показано ниже.

Table2

+----+-----------+
| ID | Parameter |
+----+-----------+
| 20 | xxcv zuio |
| 21 | iii ool   |
| 22 | xcv erto  |
| 23 | ssrt uio  |
| 24 | uio uioe  |
+----+-----------+

Мой вопрос в том, как я могу присоединиться к этой таблице, чтобы получить тот же результат, что и вышеупомянутый запрос.

Я все еще учусь на присоединение, так что любые советы будут полезны.

Ответы [ 2 ]

2 голосов
/ 07 мая 2020

Вы можете использовать exists:

select t1.*
from Table1 t1
where exists (select 1 from table2 t2 where t1.test like concat('%', t2.parameter, '%'))
0 голосов
/ 07 мая 2020

Я не думаю, что использование соединения помогает в этом сценарии, и этот вид текстового поиска не является сильной стороной для SQL Server. Рассмотрите возможность создания индекса elasticsearch или использования другой системы, которая поддерживает текстовый поиск в качестве основного варианта использования (SQL Сервер поддерживает полнотекстовый поиск, если эта функция включена, но меня всегда предупреждали об этом, поэтому не используйте опыт с этим.)

Если пребывание в пределах T SQL желательно в вашей конкретной ситуации, я бы использовал неудобный синтаксис «OR LIKE». Недостаток элегантности компенсируется удобочитаемостью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...