SQL Server查找并替换另一个表中提到的单词

时间:2016-03-28 10:54:24

标签: sql-server

我有一个表[选择],其中包含列Id,Id_purchase和Id_employee。 Id是主键,全部是int类型。

Id | Id_purchase | Id_employee
1  |     1       |   1 

表[employees]有Id_employee(int),名称是varchar(250)

Id_employee |  name
1           |  name1
2           |  name2
3           |  name3

表[purchase]有Id_purchase(int),article是varchar(250)

Id_purchase |      article 
   1        |  book1 pattern ABC 
   2        |  book2 autor hjk abc
   3        |  book3 about xyz
   4        |  book4 JJJJ

,表[key_search]有Id,查询是varchar(100)。

ID  |  query 
1   | book*abc
2   | book*about

来自[员工]的每位员工如何创建记录以添加到表[选择]从表[购买]中的所有购买的ID,其中表[key_search]中提到了单词。 在表[key_search]中,“*”被认为是任意数量字符的替代品。对于样本,像“book * abc”这样的查询需要REPLACE到“%book%abc%”才能在所有购买中进行搜索。

1 个答案:

答案 0 :(得分:1)

也许是这样的:

SELECT  p.Id_purchase,
        e.Id_employee
FROM employees e
CROSS JOIN purchase p
INNER JOIN key_search k 
  ON p.article LIKE '%' + REPLACE(k.[query],'*','%') + '%'

对于当前样本,结果如​​下:

| Id_purchase | Id_employee |
|-------------|-------------|
|           1 |           1 |
|           1 |           2 |
|           1 |           3 |
|           2 |           1 |
|           2 |           2 |
|           2 |           3 |
|           3 |           1 |
|           3 |           2 |
|           3 |           3 |