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没问题,伙计:)