Non c'è bisogno di fare più join. Se devi abbinare tutti i tag, puoi utilizzare un IN
clausola con una sottoquery come questa:
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
)
Nota che dovrai regolare il numero 2 in modo che sia il numero di tag univoci su cui stai abbinando. Fai attenzione nel caso in cui si tratti di dati inseriti dall'utente e inseriscano lo stesso tag due volte.