有人有一个好主意/解决方案如何实现这个目标?
情况是: 我有表'release'和'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” PLUS 所有版本都带有“TAG_2”(当然那些带有两个标签的版本)。
但我需要的是只获得标签的交集,比如说:
“发布'TAG_1' AND 'TAG_2'”
所以我尝试了:
...
AND (nt.name = ('TAG_1') AND nt.name = ('TAG_2'))
...
但这会导致空洞的结果。 有谁知道如何实现这一目标?不知道如何更进一步,并且非常感谢一些意见!
THX
答案 0 :(得分:1)
您可以要求having
子句中存在两个不同的ntags:
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