У меня есть отношение post
и tag_system_one
и tag_system_two
.
Существует отношение многие ко многим между post
и tag_system_one
- tag_system_one_post
.
Существует отношение "многие ко многим" между post
и tag_system_two
- tag_system_two_post
.
Я бы хотел запрос SQL для поиска по нескольким тегам.
Когда естьтолько одна система тегов, запрос довольно прост:
SELECT post.*
FROM post
JOIN tag_system_one_post ON post.id = tag_system_one_post.fk_post
JOIN tag_system_one ON tag_system_one_post.fk_tag_system_one = tag_system_one.id
WHERE tag_system_one.id IN (500, 533)
GROUP BY post.id
HAVING COUNT(*) = 2;
В этом примере он получает все сообщения с двумя тегами 500
и 533
(пересекаются).
Posts that only have tag `500` but not `533` will not be shown.
Я могу применить приведенное выше утверждение, потому что я использую COUNT(*) = 2
.Но это не сработает, когда я представлю другую систему тегов (tag_system_two
).
Есть ли способ сделать это без подзапроса?