我有两个表,分别称为表A和表B。表A是单词列表,而表B是与这些单词相关的文档列表。我需要进行搜索,以检索哪些文档包含我要查找的全部单词或其中的一些单词。
表结构和数据示例如下:
Declare @TableA Table (IdWord Int, Word Varchar(100))
Declare @TableB Table (IdProcess Int, IdWord Int, Document Varchar(100))
Insert Into @TableA Values (1, 'A');
Insert Into @TableA Values (2, 'B');
Insert Into @TableA Values (3, 'C');
Insert Into @TableA Values (4, 'D');
Insert Into @TableA Values (5, 'E');
Insert Into @TableB Values (1, 1, 'Document 1.doc');
Insert Into @TableB Values (1, 2, 'Document 1.doc');
Insert Into @TableB Values (1, 3, 'Document 1.doc');
Insert Into @TableB Values (1, 4, 'Document 1.doc');
Insert Into @TableB Values (2, 1, 'Document 2.doc');
Insert Into @TableB Values (2, 2, 'Document 2.doc');
Insert Into @TableB Values (3, 5, 'Document 3.doc');
我一直在思考如何解决以下逻辑:
(Word='A' And Word='B' And Word='C') Or Word='E'
哪些结果应作为文档1.doc(因为它包含3个以上的单词,但包含我要查找的所有3个单词)和文档3.doc(由于或运算符)
有什么想法吗?
答案 0 :(得分:3)
使用HAVING
:
SELECT Document
FROM @TableA A
JOIN @TableB B
ON B.IdWord = A.IdWord
WHERE Word IN ('A', 'B','C', 'E')
GROUP BY Document
HAVING COUNT(DISTINCT CASE WHEN Word IN ('A','B', 'C') THEN Word END) = 3
OR COUNT(DISTINCT CASE WHEN Word IN ('E') THEN Word END) = 1