Mysql 选择和组合中关联的所有数据

Mysql 选择和组合中关联的所有数据,mysql,sql,Mysql,Sql,我有一个表文档和表标签。我有第三个多对多关联表,名为doc\u labels 我在构建SQL语句以选择与label1和label2相关的所有文档时遇到问题 我尝试了以下方法: SELECT * FROM documents d RIGHT JOIN doc_labels dl ON(d.id = dl.doc_id) WHERE dl.label_id = 1 AND dl.label_id = 2 此语句将不返回任何内容 SELECT * FROM documents d RIGHT JOI

我有一个表
文档
和表
标签
。我有第三个多对多关联表,名为
doc\u labels

我在构建SQL语句以选择与
label1
label2
相关的所有文档时遇到问题

我尝试了以下方法:

SELECT * FROM documents d RIGHT JOIN doc_labels dl
ON(d.id = dl.doc_id)
WHERE dl.label_id = 1 AND dl.label_id = 2
此语句将不返回任何内容

SELECT * FROM documents d RIGHT JOIN doc_labels dl
ON(d.id = dl.doc_id)
WHERE dl.label_id = 1 OR dl.label_id = 2
此语句将返回带有
label1
label2

如何使用
label1
label2
选择所有文档

谢谢你的帮助。

你可以这样做

SELECT * FROM documents d
RIGHT JOIN doc_labels dl
ON(d.id = dl.doc_id)
WHERE dl.label_id IN(1,2)
GROUP BY d.id
HAVING COUNT(DISTINCT dl.label_id) >= 2 /*this will give you the documents that must have lable 1,2 and can have more lables*/
或者,如果您需要仅带有标签1和2的文档,请更改

HAVING COUNT(DISTINCT dl.label_id) = 2

@shree.pat18由于使用了聚合函数
count()
,这就引出了一个问题,为什么所有OP需要的聚合函数都是必需的行?@shree.pat18存在多对多关联,使用join将根据每个文档的关联数给出每个文档的收获行,因此,group by with count和with have filter将检查我希望生成的每个文档的计数sense@shree.pat18没问题,伙计:)