sql >> Base de Datos >  >> RDS >> Mysql

Seleccione filas con varias etiquetas... ¿hay alguna forma mejor?

No es necesario hacer múltiples uniones. Si necesita hacer coincidir todas las etiquetas, puede usar un IN cláusula con una 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
)

Tenga en cuenta que deberá ajustar el número 2 para que sea el número de etiquetas únicas con las que está haciendo coincidir. Tenga cuidado en caso de que se trate de datos ingresados ​​por el usuario y este ingrese la misma etiqueta dos veces.