Fundo
No processo de QA/QC, estou escrevendo muitas consultas com várias junções. Estou usando MySQL.
Gostaria de saber como (se) posso simplificar as instruções de junção, por exemplo, definindo campos padrão para junção.
Minhas tabelas são nomeadas com uma forma plural do objeto que elas contêm:
names
types
actions
surnames
names_surnames
onde names_surnames
está uma tabela de pesquisa muitos-muitos
as chaves primárias são sempre id
e as chaves estrangeiras são sempre, por exemplo
names.type_id
names.action_id
names_surnames.name_id
names_surnames.surname_id
Minhas junções seriam algo como
select names.col1
from names join types on names.type_id = type.id
join actions on names.action_id = actions.id;
Pergunta
Existe uma maneira de fazer com que o MySQL sempre assuma que as tabelas serão unidas on thistables.thattable_id = thattable.id
?
Se as colunas tivessem o mesmo nome em "ambas" as tabelas, acho que você poderia usar
NATURAL JOIN
. Embora isso não funcione para você, sua consistência na nomenclatura ainda deve permitir que você gere consultas - ou pelo menos as cláusulas de junção - com uma linguagem de script.Que tal criar exibições para junções que são usadas repetidamente?
Por exemplo:
Se as tabelas envolvidas no JOIN compartilharem campos com nomes idênticos,
você poderá usar a cláusula USING da sintaxe do JOIN .
Por exemplo
SE a tabela de ações tivesse action_id como chave primária em vez de id
e a tabela de tipos tivesse type_id como chave primária em vez de id
ENTÃO a consulta poderia ser reescrita como
De uma chance !!!