als je het item met een van de twee tags wilt, dan:
select distinct item_id, item_name
from items_tags
where tag_name in ('yellow', 'fruit');
als je wilt dat het item beide tags heeft, dan:
select item_id, item_name
from items_tags
where tag_name in ('yellow', 'fruit')
group by item_id, item_name
having count(*) = 2;
op basis van je opmerking
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';
Deze query geeft id en item uit de tabel met items. Het geeft een item met zowel geel als fruitlabel. en de items met alleen een rode tag.
als je items met twee tags en slechts twee tags wilt krijgen, gebruik dan de volgende voorwaarde in het hebben van clausule
(group_concat(c.tag) like '%yellow%'
and group_concat(c.tag) like '%fruit%'
and count(*) = 2)