si vous voulez l'article avec l'une des deux balises, alors :
select distinct item_id, item_name
from items_tags
where tag_name in ('yellow', 'fruit');
si vous voulez que l'élément ait les deux balises, alors :
select item_id, item_name
from items_tags
where tag_name in ('yellow', 'fruit')
group by item_id, item_name
having count(*) = 2;
d'après votre commentaire
select a.id, a.item
from items a, items_tags b, tags c
where a.id = b.item_id
and b.tag_id = c.id
group by id, item
having (group_concat(c.tag) like '%yellow%'
and group_concat(c.tag) like '%fruit%')
or group_concat(c.tag) = 'red';
Cette requête donne l'identifiant et l'élément de la table des éléments. Il donne un article qui a à la fois une étiquette jaune et une étiquette de fruit. et les articles avec seulement une étiquette rouge.
si vous souhaitez obtenir des éléments avec deux balises et seulement deux balises, utilisez la condition suivante dans la clause have
(group_concat(c.tag) like '%yellow%'
and group_concat(c.tag) like '%fruit%'
and count(*) = 2)