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

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?

Était-ce utile?

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 !!!

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top