jonction de 2 colonnes du tableau 1 au tableau 2
Question
Comment référencez-vous les colonnes de table1 à 2 dans le tableau 2
J'ai créé un tableau ' État ' avec 50 lignes exactes
.essayant d'établir une relation (weddingState, contactState) dans le tableau Wedding '
C’est la déclaration que j’ai créée, mais elle rejoint uniquement le WeddingState supérieur - ne semble pas se soucier de la connexion INNER ci-dessous ...
SELECT *
DE mariages
INNER JOIN déclare comme s1 lors des mariages. WeddingState = s1.StateId // état du mariage
INNER JOIN déclare comme s2 ON weddings.ContactState = s2.StateId // état de contact de la mariée
WHERE weddings.weddingid = "094829292"
La solution
Je suppose que vous les récupérez en PHP ou quelque chose du genre, et que vous récupérez les lignes dans un tableau de hachage, indexé par le nom du champ. Bien sûr, il ne peut y avoir qu'un seul élément dans un hachage avec une clé donnée. Vous devez donc utiliser des alias de colonne pour vous assurer que les colonnes portant le même nom se voient attribuer un alias distinct.
SELECT w.*, s1.StateID AS wstate, s2.StateId AS cstate
FROM weddings AS w
INNER JOIN states AS s1 ON w.WeddingState = s1.StateId //state of marriage
INNER JOIN states AS s2 ON w.ContactState = s2.StateId //contact state of bride
WHERE w.weddingid="094829292";
Votre tableau de hachage aura désormais les clés " wstate " et "état". Sans aliaser ces colonnes, l’une écrasera toujours l’autre.
Autres conseils
Et qu'obtenez-vous pour votre résultat qui vous amène à votre conclusion?
Cela va semer la confusion, car les noms de champs dans les deux jointures, ainsi que certains noms de champs dans la table primaire, sont identiques. C'est une très bonne idée de choisir explicitement vos colonnes de sortie et de leur donner des alias significatifs.
Que diriez-vous de:
SELECT s1.StateName, s2.StateName
DE mariages
INNER JOIN déclare que s1 ON weddings.WeddingState = s1.StateId // état du mariage
INNER JOIN déclare comme s2 ON weddings.ContactState = s2.StateId // état de contact de la mariée
WHERE weddings.weddingid = "094829292"
Merci Bill, j'ai également ajouté le nom d'état
SÉLECTIONNER w. *,
s1.StateId AS WeddingStateId,
s1.StateName AS WeddingStateName,
s2.StateId AS ContactStateId,
s2.StateName AS ContactStateName
DE mariages comme w
INNER JOIN indique AS s1 sur w.WeddingState = s1.StateId
INNER JOIN indique AS s2 ON w.ContactState = s2.StateId