查询使用 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" 语法。它在可读性方面弥补了优雅方面的不足。
我有两个 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" 语法。它在可读性方面弥补了优雅方面的不足。