我有一个名为 documents 的表,其中有一行名为 Nigel Harding
DOCUMENTS
id | label
24 | Nigel Harding
他已经被另外两个文件标记了,一个ID为1和12,那个表叫做文件标签
DOCUMENT_TAGS
id | label | Document_id
1 | TAG A | 24
12 | TAG B | 24
我正在尝试创建一个查询,我可以在其中找到一个结果,如果搜索标签 1 和 12,Nigel Harding 将出现一次,但我没有运气。
我找到了搜索一个标签 ID 的查询,但我正在尝试对两个标签进行查询。
SELECT documents.id
FROM documents
LEFT JOIN documents_tags
ON documents.id=documents_tags.document_id
WHERE documents_tags.tag_id = 1 ORDER BY documents.label
我明白为什么要添加...
AND documents_tags.tag_id = 12
...到最后都行不通,但我不确定我需要做什么才能让正确的查询显示我的一个结果,因为我对 SQL 的理解非常基础。
最佳答案
如果我理解你的问题,你只是缺少 IN
和 DISTINCT
:
SELECT DISTINCT documents.id
FROM documents
LEFT JOIN documents_tags
ON documents.id=documents_tags.document_id
WHERE documents_tags.tag_id IN (1, 12) ORDER BY documents.label
使用 IN
您将获得任何指定标签 ID 的文档,使用 DISTINCT
您将确保只获取每个文档 ID 一次。
编辑:由于您是按 documents.label 排序的,我猜这就是您想要显示的内容。不要忘记您可以将 SELECT
语句更改为:
SELECT DISTINCT documents.label
甚至:
SELECT DISTINCT documents.id, documents.label
关于mysql - SQL 多重左连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21683153/