关键字分析:返回描述列包含另一个表中另一列中的一个或多个单词的行

时间:2018-03-19 15:15:29

标签: sql sql-server tsql

我有一个表(表A)和一个描述字段(varchar(max))。 我有另一个表(表B),其中包含带关键字的字段。

对于表B中的所有行,我想返回表A中包含至少一个表A中指定的关键字的所有行。

我在Google网站上搜索并搜索过但未找到任何示例如何执行此操作。我找到的所有示例都要求您输入搜索字符串,而不是仅动态运行查询。

3 个答案:

答案 0 :(得分:0)

您可以使用通配符和这样的连接:

declare @TableA table (description varchar(max))
declare @TableB table (keyword varchar(max))

insert into @TableA values ('The quick brown fox jumped over the lazy dog.'), ('I think, therefore I am.')
insert into @TableB values ('jumped'), ('therefore'), ('fox'), ('th')

select * from @TableB b
inner join @TableA a on a.description like '%' + b.keyword + '%'

结果:

keyword       description
jumped        The quick brown fox jumped over the lazy dog.
therefore     I think, therefore I am.
fox           The quick brown fox jumped over the lazy dog.
th            The quick brown fox jumped over the lazy dog.
th            I think, therefore I am.

答案 1 :(得分:0)

SELECT *
FROM TableB
JOIN TableA ON tableA.description LIKE '%' + TableB.keyword + '%'

我建议你在描述字段上放一个全文索引并使用它的搜索功能,因为LIKE搜索双方的通配符将无法使用任何正常索引。这也假设TableB中每行有一个关键字。

答案 2 :(得分:0)

尝试这样的事情:

CREATE TABLE TableA
(
    Id INT Identity Primary Key,
    Description varchar(max)
)

CREATE TABLE TableB
(
    Id Int Identity Primary Key,
    Keyword Varchar(max) 
)


INSERT INTO TableB (Keyword)
VALUES ('My'), ('Ipso'), ('Dipso'), ('Dinosaur')

INSERT INTO TableA(Description)
VALUES ('My very best friend'), ('Ipso Ipso Dipso'), ('My favourite Dinosaur is a T_Rex'),('None of the above')


SELECT *
FROM TableA
INNER JOIN TableB
    ON Description LIKE '%' + Keyword + '%'