¿Encontrar publicaciones con etiqueta1 y etiqueta2? (usando una tabla de unión) Existe / Tener / subconsultas ... ¿Qué usar?

Necesito hacer una consulta para buscar y filtrar en múltiples términos.

Tengo una mesa con armas y todas pueden tener múltiples etiquetas.Quiero poder crear una opción de filtro para el usuario que muestre solo armas con, p. 'etiqueta1' Y 'etiqueta2'.

Hasta ahora:
Los estaba filtrando usando unGROUP_CONCAT conHAVING hasta ahora pero esto tiene problemas de rendimiento! Como me veo obligado a hacer unGROUP BY w.id Pero quiero hacerORDER BY algo más. Y GROUP BY no juega muy bien con ORDER BY ...

Traté de crear algo con EXISTS (SELECT ...) para poder filtrar en múltiples valores, sin embargo, no estoy seguro de hacer esto cuando hay una "tabla de unión" en el medio ... (así que con 2 combinaciones restantes)

weapons:
id | name
----------
1  | sword
2  | shield

weapon_tag_links:
tag_id  | weapon_id
-------------------
62      | 1
80      | 1
80      | 2
60      | 2

weapon_tags:
tag_id | tag
--------------
60      | red
62      | blue
80      | old

Consulta de busqueda:

SELECT DISTINCT * FROM weapons as w
LEFT JOIN weapon_tag_links AS l ON l.weapon_id = w.id 
INNER JOIN weapon_tags AS t ON l.tag_id = t.tag_id 
WHERE EXISTS (
    ****** Something to go here *******
    WHERE t.tag = ‘blue’
) AND EXISTS (
    ****** Something to go here *******
    WHERE t.tag = ‘old’
)

Solo me falta el enlace que necesitas enEXISTS. Pero no estoy seguro de cómo agregar esto ...

La pregunta:
Digamos que quiero buscar un registro en armas que seablue Yold, (una espada en este caso) ¿cómo hago esto?

No digo que DEBO usar "EXISTS", pero quiero la mejor forma optimizada de buscar publicaciones con ciertas etiquetas conectadas porAND!

Respuestas a la pregunta(2)

Su respuesta a la pregunta