我有一张类似于下面的表
问题表:
Qid Tags
--- ---------
1 SQL
1 DATABASE
1 ALGORITHM
2 ALGORITHM
2 TAGS
3 SQL
3 SYNTAX
3 DATABASE
以下
SELECT * FROM Question table WHERE TAGS='SQL'
将显示:
Qid Tags
--- ----
1 SQL
2 SQL
3 SQL
我正在寻找一个基于相似标签显示最高相关问题的查询。
所以,如果我查询问题表 - Qid=1
。结果将是Qid 3,因为Qid 1和Qid 3有两个相似的术语,但Qid 2只有1个类似的标签Qid 1.如果我查找Qid 2,它将返回Qid 1,因为它们共享1个标签和Qid 2和3没有共享标签。如果我查询Qid 3,它将返回Qid 1,因为Qid 1有2个Qid 3标签,但Qid 2没有Qid 3的标签。
感谢您的帮助。
答案 0 :(得分:0)
沿着这些方向可能有什么?
SELECT Qid, COUNT(*) AS TagsInCommon FROM Questions
WHERE Tags IN (
SELECT DISTINCT Tags FROM Questions WHERE Qid=1
)
GROUP BY Qid
ORDER BY TagsInCommon DESC
我不确定字段名称,但你明白了......
答案 1 :(得分:0)
declare @Qid int
set @Qid = 1
select top 1 Q2.Qid, COUNT(*) from Questions Q1
inner join Questions Q2 on Q1.Tags = Q2.Tags
where Q1.Qid = @Qid and Q2.Qid <> @Qid
group by Q2.Qid
order by COUNT(*) desc