Tecnicamente, você só pode fazer isso com SQL dinâmico - o que significa Sintaxe da instrução preparada do MySQL , ou concatenação de string para criar a consulta antes de enviá-la ao banco de dados. Declarações preparadas são a escolha preferível, devido à melhor defesa de injeção de SQL.
Você poderia usar LEFT JOINs para as várias tabelas, mas isso significaria incluir várias colunas de cada uma das tabelas (armas, escudos, espadas...) que seriam nulas se a categoria não correspondesse. Seria horrível tentar extrair dados de uma única consulta ...
PS:Por que existe uma
SWORD
tabela? Isso não seria coberto pelo WEAPON
tabela?