Técnicamente, solo puede hacer esto con SQL dinámico, lo que significa Sintaxis de declaraciones preparadas de MySQL o concatenación de cadenas para crear la consulta antes de enviarla a la base de datos. Las declaraciones preparadas son la opción preferible, debido a una mejor defensa contra la inyección de SQL.
Podría usar LEFT JOIN en las distintas tablas, pero significaría incluir numerosas columnas de cada una de las tablas (armas, escudos, espadas...) que serían nulas si la categoría no coincidiera. Sería horrible intentar extraer datos de una sola consulta...
PD:¿Por qué hay una SWORD
¿mesa? ¿No estaría eso cubierto por el WEAPON
? mesa?