多个关键词匹配多个关键词的问题。
有张新闻表,有一个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