查询使用 like 运算符连接两个表

Query to join two tables with like operator

我有两个 table,其数据如下

表 1

+-----+-------+-------------------------+
| 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个不同的参数,后面也可以增加。

所以我决定在数据库中创建一个新的 table,我们将其命名为 Table2,参数如下所示。

表 2

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

我的问题是如何加入此 table 以提供与上述查询相同的结果。

我仍在学习联接,所以任何建议都会有所帮助。

您可以使用 exists:

select t1.*
from Table1 t1
where exists (select 1 from table2 t2 where t1.test like concat('%', t2.parameter, '%'))

我不认为在这种情况下使用连接有帮助,而且这种文本搜索不是 SQL 服务器的强项。考虑构建一个 elasticsearch 索引或使用另一个支持文本搜索的系统作为主要用例(SQL 如果启用该功能,服务器确实支持全文搜索,但我一直被警告远离它,所以不要'我没有这方面的经验。)

如果您的特定情况需要保持在 TSQL 范围内,那么我会使用笨拙的 "OR LIKE" 语法。它在可读性方面弥补了优雅方面的不足。