Допустим, мне нужно найти все статьи, которые помечены всеми тремя тегами: food
, lifestyle
и health
. Какой самый эффективный способ сделать это в MySQL? Я вышел с этим решением:
select * from articles
where exists (
select * from tags
join article_tag on article_tag.tag_id = tags.id
where article_tag.article_id = articles.id
and tags.tag = 'food'
) and exists (
select * from tags
join article_tag on article_tag.tag_id = tags.id
where article_tag.article_id = articles.id
and tags.tag = 'lifestyle'
) and exists (
select * from tags
join article_tag on article_tag.tag_id = tags.id
where article_tag.article_id = articles.id
and tags.tag = 'health'
)
Работает нормально, но выглядит как много повторений. Какой самый эффективный запрос для решения этой проблемы?