首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在SQL中使用another从另一个表中搜索关键字

如何在SQL中使用another从另一个表中搜索关键字
EN

Stack Overflow用户
提问于 2014-04-10 02:18:23
回答 2查看 6.8K关注 0票数 1

我使用的是2012,我有两个表:

1)包含关键字列表的Keyword_table,如:

代码语言:javascript
运行
复制
keyword, nvarchar(50)
-------------------
web
book
AI
work
...

2)包含ID和项目列表的art_table,如:

代码语言:javascript
运行
复制
artID,  int         art,  nvarchar(MAX)
---------------------------------------
1                  The Web is a system of ...
2                  AI is the intelligence exhibited by machines or software ...
3                  The Web includes Web 1.0, Web 2.0 and Web 3.0
4                  The work done by ...
....

我希望搜索keyword_table中的每个关键字,以获得包含该关键字的文章数量,例如,根据上面的数据,结果应该如下所示:

代码语言:javascript
运行
复制
keyword            No of articles
----------------------------------
web                2
book               0
AI                 1
work               1

art_table有数百万条记录,它在art列上有全文索引,我知道我可以使用contains搜索这样一个简单的术语(单个单词/短语):

代码语言:javascript
运行
复制
select *
from art_table
where contains (art, 'web')

并计算包含web的文章数

代码语言:javascript
运行
复制
select count(*)
from art_table
where contains (art, 'web')

但是如何在keyword_table中搜索所有的关键字呢?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-22 16:29:16

如果有人遇到同样的需要,下面是一个建议的答案:

代码语言:javascript
运行
复制
DECLARE @kword nvarchar(200);
DECLARE keywordCursor CURSOR FOR(SELECT keyword FROM keyword_table);
OPEN keywordCursor;
FETCH NEXT FROM keywordCursor INTO @kword;
WHILE @@FETCH_STATUS=0
BEGIN
    INSERT INTO keyword_occ(keyword,occ)
    VALUES(@kword,(SELECT count(*) FROM art_table WHERE CONTAINS(art, @kword)));
    FETCH NEXT FROM keywordCursor INTO @kword;
END;
CLOSE keywordCursor;
DEALLOCATE keywordCursor;
GO

其中keyword_occ是保存所需结果的表(keyword nvarchar(200),occ int)。

我希望我可以避免WHILE loop,然而,这个脚本工作良好和快速与数百万索引记录!

票数 0
EN

Stack Overflow用户

发布于 2014-04-10 02:25:49

试着做这样的事情:

代码语言:javascript
运行
复制
select a.* from art_table a
inner join keyword_table b
on a.art like '%' + b.keyword + '%'

这将根据关键字给出匹配,并返回包含关键字的所有记录。

编辑

或者试试这个?

代码语言:javascript
运行
复制
select a.* from art_table a
inner join keyword_table b
on contains(a.art,  b.keyword)

注意,我还没有对此进行语法测试:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22977519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档