Puis-je automatiser la déclaration « sur » des requêtes de MySQL?
Question
Arrière-plan
Dans le processus d'AQ / CQ, je vous écris beaucoup de requêtes avec plusieurs jointures. J'utilise MySQL.
Je voudrais savoir comment (si) je peux simplifier joindre des déclarations, par exemple en définissant les champs par défaut de se joindre à.
Mes tableaux sont nommés avec une forme plurielle de l'objet qu'ils contiennent:
names
types
actions
surnames
names_surnames
où names_surnames
est beaucoup-beaucoup table de recherche
les clés primaires sont toujours id
et les clés étrangères sont toujours, par exemple.
names.type_id
names.action_id
names_surnames.name_id
names_surnames.surname_id
Mon rejoint serait quelque chose comme
select names.col1
from names join types on names.type_id = type.id
join actions on names.action_id = actions.id;
Question
Y at-il un moyen de MySQL pour toujours supposer que les tables seront jointes à on thistables.thattable_id = thattable.id
?
La solution
Que diriez-vous créant des vues pour les jointures qui sont utilisé à plusieurs reprises?
Par exemple:
create view my_view as
select names.id as name_id, names.type_id, names.action_id, ...
from names join types on names.type_id = type.id
join actions on names.action_id = actions.id;
Autres conseils
Si les colonnes ont été le même nom dans les tableaux « à la fois », je pense que vous pouvez utiliser NATURAL JOIN
. Bien que ne fonctionnera pas pour vous, votre cohérence dans la dénomination devrait laisser encore vous générer des requêtes - ou tout au moins les clauses de jointure - avec un langage de script
Si les tables impliquées dans la REJOIGNEZ partager des champs de même nom,
vous pouvez utiliser la clause USING de la syntaxe JOIN .
Par exemple
IF avait action_id la table des actions comme la clé primaire au lieu de id
et la table des types avait type_id comme la clé primaire au lieu de id
requête pourrait être réécrite comme
select names.col1
from names join types USING (type_id)
join actions USING (action_id);
Lui donner un essai !!!