从多个标准中选择

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(一次).

我被卡住了,我最大的问题是我甚至无法找到要搜索的内容.我意识到这个观点可能没有必要.

任何帮助将不胜感激.

谢谢

OMG*_*ies 5

如果需要指定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)