对不起,我无法为我的问题提供更好的标题,因为我对SQL很新.我正在寻找一个解决以下问题的SQL查询字符串.
我们假设下表:
DOCUMENT_ID | TAG ---------------------------- 1 | tag1 1 | tag2 1 | tag3 2 | tag2 3 | tag1 3 | tag2 4 | tag1 5 | tag3
现在我想选择包含一个或多个标签的所有不同文档ID(但必须提供所有指定的标签).例如:选择带有tag1的所有document_id,并且tag2将返回1和3(但不是4,例如因为它没有tag2).
最好的方法是什么?
问候,凯
Joh*_*sch 14
SELECT document_id
FROM table
WHERE tag = 'tag1' OR tag = 'tag2'
GROUP BY document_id
HAVING COUNT(DISTINCT tag) = 2
Run Code Online (Sandbox Code Playgroud)
因缺乏约束而更新......
这假定DocumentID和Tag是主键.
编辑:更改了HAVING子句以计算DISTINCT标记.这样,主键是什么并不重要.
测试数据
-- Populate Test Data
CREATE TABLE #table (
DocumentID varchar(8) NOT NULL,
Tag varchar(8) NOT NULL
)
INSERT INTO #table VALUES ('1','tag1')
INSERT INTO #table VALUES ('1','tag2')
INSERT INTO #table VALUES ('1','tag3')
INSERT INTO #table VALUES ('2','tag2')
INSERT INTO #table VALUES ('3','tag1')
INSERT INTO #table VALUES ('3','tag2')
INSERT INTO #table VALUES ('4','tag1')
INSERT INTO #table VALUES ('5','tag3')
INSERT INTO #table VALUES ('3','tag2') -- Edit: test duplicate tags
Run Code Online (Sandbox Code Playgroud)
询问
-- Return Results
SELECT DocumentID FROM #table
WHERE Tag IN ('tag1','tag2')
GROUP BY DocumentID
HAVING COUNT(DISTINCT Tag) = 2
Run Code Online (Sandbox Code Playgroud)
结果
DocumentID
----------
1
3
Run Code Online (Sandbox Code Playgroud)