mysql - SQL 多重左连接

标签 mysql sql

我有一个名为 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 的理解非常基础。

最佳答案

如果我理解你的问题,你只是缺少 INDISTINCT:

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/

相关文章:

php - foreach inside foreach 迭代两次

java - 在双向多对多关系中有效获取子/父实体

sql - 无法将数据库引用添加到 VS2012 项目

mysql - 获取所有时间前 5 个国家最近 7 天的总数

sql - 如果您在 ColdFusion 中有两个具有相同设置的不同数据源连接,它们是否共享同一个池?

php - mysqli 计数如何划分这两个计数并回显结果

MYSQL INNER JOIN 可能有空字段

php - 按 Field1 Field2 Field3 ASC 和 DESC 排序查询结果 so

mysql - 使用Where子句中的查询更新表

sql - 将Grails应用程序与Oracle数据库连接时发生异常