Szukam sposobu na utworzenie zapytania, aby wykonać następujące czynności:
Rozważmy 3 tabele:
- produkty: lista produktów
- tagi: lista tagów
- tag_ties: tabela używana do powiązania tagu z produktem
Rozważmy tę strukturę dla każdej tabeli:
Produkty:
- id (int, autoinkrement)
- nazwa (varchar, nazwa produktu)
Tagi:
- id (int autoincrement)
- etykieta (varchar, etykieta tagu)
Tag_ties:
- id (int, autoinkrement)
- tag_id (int, odniesienie do identyfikatora tagu)
- ref_id (int, odniesienie do identyfikatora produktu)
Czego chcę:
Uzyskaj wszystkie produkty oznaczone na przykład tagami id 10, 11 i 12.
To zapytanie nie działa, ponieważ zwraca produkty posiadające co najmniej jeden z tagów:
select
p.name as name,
p.id as id
from
products p inner join tag_ties ties
on
p.id=ties.ref_id
where
ties.ref_id=p.id and
ties.tag_id in (10,11,12)
group by
p.id
order by
p.name asc