有人有如何实现这一目标的好主意/解决方案吗?
情况是: 我有表“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
关于MySQL查询,多对多关系的交集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3882123/