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

时间:2014-05-11 15:13:34

标签: mysql sql

我有一张桌子documents和一张桌子labels。我是名为doc_labels的多对多关联的第三个表。

构建我的SQL语句以选择与label1label2

相关联的所有文档时出现问题

我尝试了以下内容:

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 OR label2

的alle文档

如何选择label1label2的所有文档。

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

你可以这样做

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