Pas besoin de faire plusieurs jointures. Si vous devez faire correspondre toutes les balises, vous pouvez utiliser un IN
clause avec une sous-requête comme celle-ci :
select p.sku, p.name, p.path
from shop_products p
where p.sku in (
select pc.product_sku
from shop_products_categories pc
inner join shop_categories c on pc.category_id = c.id
where c.path in ('flowers', 'romance')
group by pc.product_sku
having count(distinct c.path) = 2
)
Notez que vous devrez ajuster le nombre 2 pour qu'il corresponde au nombre de balises uniques sur lesquelles vous faites correspondre. Méfiez-vous s'il s'agit de données saisies par l'utilisateur et qu'il saisit deux fois la même balise.