首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

多个关键词匹配多个关键词的有关问题

2013-06-26 
多个关键词匹配多个关键词的问题。有张新闻表,有一个Tags字段,存放相关词,多个词用,分隔。。。现在想把相似的T

多个关键词匹配多个关键词的问题。
有张新闻表,有一个Tags字段,存放相关词,多个词用,分隔。。。现在想把相似的Tags显示在一起。。。

如第一条可能是:汽车,银行
第二条:银行,黄金
第三条:汽车
第四条:美食
...........................

比如显示第一条新闻的时候,相关新闻可以把第二条,第三条都显示出来。。。就是关键词有一个能对应上就可以。。。
求SQL。。。。

[解决办法]


create table 新闻表(Id int, Tags varchar(50))

insert into 新闻表
select 1, '汽车,银行' union all
select 2, '银行,黄金' union all
select 3, '汽车' union all
select 4, '美食'

-- 第一条新闻
select Id, Tags
 from 新闻表
 where Id=1

-- 相关新闻
select distinct c.Id, c.Tags
 from 新闻表 c
 inner join
(select substring(a.Tags,b.number,charindex(',',a.Tags+',',b.number)-b.number) 'TagItem'
 from 新闻表 a
 inner join master.dbo.spt_values b
 on b.[type]='P' and b.number between 1 and len(a.Tags) and substring(','+a.Tags,b.number,1) = ','
 where a.Id=1) d on charindex(d.TagItem,c.Tags,1)>0
where c.Id<>1

/*
Id          Tags
----------- --------------------------------------------------
2           银行,黄金
3           汽车

(2 row(s) affected)
*/

[解决办法]

CREATE TABLE t1
(
id INT,
col VARCHAR(20)
)
INSERT INTO t1
SELECT 1,'汽车,银行' UNION ALL
SELECT 2,'银行,黄金' UNION ALL
SELECT 3,'汽车' UNION ALL
SELECT 4,'美食'
SELECT * FROM t1

;WITH AAA AS
(
SELECTSUBSTRING(A.col,B.number,CHARINDEX(',',A.col+',',B.number)-B.number) AS col
FROMt1 AS A WITH(NOLOCK) INNER JOIN
master..spt_values AS B ON B.number<=DATALENGTH(A.col)+1
ANDSUBSTRING(','+A.col,B.number,1)=','
ANDA.id=1
ANDB.[type]='P'
)
SELECTA.*
FROMt1 AS A INNER JOIN
AAA AS B ON CHARINDEX(B.col,A.col)>0
ANDA.id>1


idcol
3汽车
2银行,黄金

热点排行