程序员家园论坛软件开发数据库技术讨论区 11-02:题目--查询的问题

1  /  1  页   1 跳转 查看:2557

11-02:题目--查询的问题

11-02:题目--查询的问题

再说下题目,a表里有中国,北医,建设,你好等关键字,b表里有中华人民共和国,中国人,北京第三人民医院,你们你们好,建设银行等等。
需要a表里所有的关键词,都从b表里找出来,比如查中国,能找出,中国,中华人民共和国。
我写的语句是select  distinct  b.name  from  a,b  where  a.name=  b.name  OR  (b.name  like  '%[中国]% ')  or  (b.name  like  '%[你]% ')or  (b.name  like  '%[北医]% ')
没有问题,能把b表中的中华人民共和国,中国人,北京第三人民医院,你们好,都找出来。
但是现在问题是数据量很大,大概需要把2000个关键词从五万条完整数据中找出来,有什么好方法吗?我总不能在上面的sql语句后面加上2000个or吧???
心若无尘,一花一世界,一鸟一天堂
 

回复:11-02:题目--查询的问题

Tb1表:

b                   
--------------------
中华人民共和国
中国

中华人民共
中华人国

(所影响的行数为 5 行)
TB表:
a                 
------------------
中国

(所影响的行数为 1 行)

根据TB的结果查询TB1表中有中 和 国的行,
b                   
--------------------
中华人民共和国
中国
中华人国


注意:中和国不一定在一起哦,但是一定要这两个字
最后编辑flystone 最后编辑于 2007-11-02 13:56:11
心若无尘,一花一世界,一鸟一天堂
 

回复:11-02:题目--查询的问题

这实际上是检索技术中同义词(synonym)的问题,比如说中国和中华人民共和国是同义词,但是中国和“发展中国家”中的“中国”就不是同义词,这个问题我在清华同方曾经见过一本书介绍这个问题,一般要建一个同义词库来解决。
宠辱不惊,看庭前花开花落,去留无意,望天空云卷云舒
 

回复: 11-02:题目--查询的问题



引用:
原帖由 huangshuchun 于 2007-11-2 14:47:00 发表
这实际上是检索技术中同义词(synonym)的问题,比如说中国和中华人民共和国是同义词,但是中国和“发展中国家”中的“中国”就不是同义词,这个问题我在清华同方曾经见过一本书介绍这个问题,一般要建一个同义词库来解......


现在这个网友不是要同义词,发展中国家 也是她的结果 集中一个,只要包含 ‘中’ 和 ‘国’
心若无尘,一花一世界,一鸟一天堂
 

回复:11-02:题目--查询的问题

这样的话一条sql语句恐怕解决不了问题,要用存储过程
宠辱不惊,看庭前花开花落,去留无意,望天空云卷云舒
 

回复: 11-02:题目--查询的问题



引用:
原帖由 huangshuchun 于 2007-11-2 15:15:00 发表
这样的话一条sql语句恐怕解决不了问题,要用存储过程


没说一句SQL,过程也行,只要解决问题,然后再择优
心若无尘,一花一世界,一鸟一天堂
 

回复:11-02:题目--查询的问题

需要用到全文检索了哦
 

回复:11-02:题目--查询的问题

有点搜索引擎的意思
 

回复:11-02:题目--查询的问题

表结构以及数据如下:
TableA:
KeyWords                                          Id         
-------------------------------------------------- -----------
中国                                                1

TableB:
Words                                              ID         
-------------------------------------------------- -----------
中华人民共和国                                            1
中国                                                2
中                                                3
中华人民共                                              4
中华人国                                              5

TableC:
Char                                              ParentID    ID         
-------------------------------------------------- ----------- -----------
中                                                  1          1
国                                                  1          2

其中TableC可以在脚本中用临时表替换,表中保存的内容是将TableA中的单字符拆开后的数据

查询脚本:

DECLARE @ID INT
SELECT @ID = ID FROM TableA WHERE KeyWords = N'中国'
SELECT * FROM TableB WHERE NOT EXISTS(SELECT * FROM TableC WHERE TableB.Words NOT LIKE '%' + [Char] + '%' AND ParentID = @ID)

查询结果:
Words                                              ID         
-------------------------------------------------- -----------
中华人民共和国                                            1
中国                                                2
中华人国                                              5
 

回复:11-02:题目--查询的问题

楼上的sql经典的说
暂时没有想好
 
1  /  1  页   1 跳转

版权所有 程序员家园论坛   Sitemap

Powered by Discuz!NT 2.1.202    Copyright © 2001-2008 Comsenz Inc.
Processed in 0.0625 second(s) , 4 queries. 浙ICP备07502118号
返顶部