Não há necessidade de fazer várias junções. Se você precisar corresponder a todas as tags, poderá usar um
IN
cláusula com uma subconsulta como esta: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
)
Observe que você precisará ajustar o número 2 para ser o número de tags exclusivas com as quais você está correspondendo. Cuidado caso sejam dados inseridos pelo usuário e eles insiram a mesma tag duas vezes.