繁体   English   中英

MySQL查询,在多对多关系上相交

[英]MySQL query, intersection on many-to-many relationship

有人有一个好主意/解决方案如何实现这一目标吗?

情况是:我有通过“ releases_ntags”关联的表“ releases”和“ ntags”(包含“ release_id”和“ ntag_id”)

我想通过ntag的“ slug”获取发布的结果。

我设法做到了这一点:

sql

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM