[英]MySQL query, intersection on many-to-many relationship
有人有一个好主意/解决方案如何实现这一目标吗?
情况是:我有通过“ releases_ntags”关联的表“ releases”和“ ntags”(包含“ release_id”和“ ntag_id”)
我想通过ntag的“ slug”获取发布的结果。
我设法做到了这一点:
SELECT r.id, r.name
FROM releases r
LEFT JOIN ntags_releases rt ON rt.release_id = r.id
JOIN ntags nt ON nt.id = rt.ntag_id
AND (nt.name = ('TAG_1') OR nt.name = ('TAG_2'))
GROUP BY r.id, r.name
到目前为止好,但是这给了我与“TAG_1”所有版本加上 “TAG_2”(当然那些有两个标签关闭)的所有版本。
但是我需要的只是获取标签的交集,例如:
“发布时带有'TAG_1' 和 'TAG_2'”
所以我尝试了:
...
AND (nt.name = ('TAG_1') AND nt.name = ('TAG_2'))
...
但这导致空结果。 有谁知道如何实现这一目标? 不知道该如何做得更进一步,非常感谢您的投入!
谢谢
您可以要求在having
子句中存在两个不同的ntag:
SELECT r.id, r.name
FROM releases r
JOIN ntags_releases rt
ON rt.release_id = r.id
JOIN ntags nt
ON nt.id = rt.ntag_id
WHERE nt.name in ('TAG_1', 'TAG_2')
GROUP BY
r.id, r.name
HAVING
COUNT(distinct nt.name) = 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.