Slo*_*tty 3 sql t-sql sql-server
我有一个带文件表的数据库
DocumentID DocTitle DocDesc
Run Code Online (Sandbox Code Playgroud)
和关键字表
KeywordID Keyword
Run Code Online (Sandbox Code Playgroud)
由DocumentKeyword表链接
DocumentID KeywordID
Run Code Online (Sandbox Code Playgroud)
我使用了一个视图来提供所有文档关键字实现的数据集.
DocumentID DocTitle DocDesc Keyword
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个select语句,让我按关键字搜索文档.对于一个关键字,我可以做到这一点没问题.但我希望能够为查询使用多个关键字,并为使用所有给定关键字标记的文档返回documentID(一次).
我被卡住了,我最大的问题是我甚至无法找到要搜索的内容.我意识到这个观点可能没有必要.
任何帮助将不胜感激.
谢谢
如果需要指定keyword,而不是keywordid值 - 请使用:
SELECT d.documentid
FROM DOCUMENT d
JOIN DOCUMENTKEYWORD dk ON dk.documentid = d.documentid
JOIN KEYWORD k ON k.keywordid = dk.keywordid
AND k.keyword IN ('keyword1', 'keyword2', 'keyword3')
GROUP BY d.documentid
HAVING COUNT(DISTINCT k.keyword) = 3
Run Code Online (Sandbox Code Playgroud)
关键是IN和HAVING子句的组合 - COUNT必须与IN子句中提供的值的数量相匹配.
如果是keywordid,您可以保存连接并使用:
SELECT d.documentid
FROM DOCUMENT d
JOIN DOCUMENTKEYWORD dk ON dk.documentid = d.documentid
AND dk.keywordid IN (1, 2, 3)
GROUP BY d.documentid
HAVING COUNT(DISTINCT dk.keywordid) = 3
Run Code Online (Sandbox Code Playgroud)