Есть ли у кого-то хорошая идея/решение, как достичь этого?
Ситуация такова: У меня есть таблицы "релизы" и "ntags", связанные с 'release_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' И 'TAG_2'"
Итак, я попробовал:
...
AND (nt.name = ('TAG_1') AND nt.name = ('TAG_2'))
...
Но это приводит к пустующему результату. У кого-нибудь есть идея, как этого достичь? Не знаю, как продвигаться дальше и действительно оценил бы какой-то вклад!
ТНХ
Вы можете потребовать, чтобы в предложении 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