2009-01-13 5 views
2

Comment vous référencer des colonnes table1 à 2 colonnes dans le tableau 2se joindre à 2 colonnes de tableau 1 au tableau 2

J'ai créé une table 'État' avec 50 lignes exactes

essayant de relier (weddingState, contactState) dans « mariage » table

Ceci est la déclaration que j'ai créé, mais il ne rejoint la partie supérieure WeddingState correctement - semble ne pas se soucier de la INNER JOIN dessous ...

SELECT *

des mariages

INNER JOIN états comme s1 sur les mariages. WeddingState = s1.StateId // état du mariage

INNER JOIN états que s2 = ON weddings.ContactState s2.StateId // état de contact de la mariée

OÙ weddings.weddingid = "094829292"

+0

Huh? Qu'est-ce qui vient de se passer? –

Répondre

3

Je suppose que vous récupérez ces derniers dans PHP ou quelque chose, et vous récupérez les lignes dans un tableau de hachage, saisi par le nom du champ. Bien sûr, il ne peut y avoir qu'un é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 reçoivent 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"; 

Maintenant votre table de hachage aura les clés "wstate" et "cstate". Sans aliaser ces colonnes, l'une écrasera toujours l'autre.

+0

Merci Bill pour l'assistance ... Je suis en train de coder dans ColdFusion/MySQL et il y a très peu de support autour. depuis que je avais besoin de connaître le nom de l'Etat et je l'ai fait: –

+0

* Sélectionnez W, s1.StateId AS WeddingStateId, s1.StateName AS WeddingStateName, s2.StateId AS ContactStateId, s2.StateName AS ContactStateName \t. FROM mariages AS w \t INNER JOIN états AS s1 ON w.WeddingState = s1.StateId \t INNER JOIN états AS s2 ON w.ContactState = s2.StateId –

0

Et qu'est-ce que vous obtenez pour votre résultat qui vous mène à votre conclusion? Cela va être source de confusion pour les débutants car les noms de champs dans les deux jointures, plus quelques 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.

+0

Merci pour la note - J'ai mis en œuvre ce que vous avez dit dans le déclaration. Merci pour votre réponse –

0

Que diriez-vous:

SELECT s1.StateName, s2.StateName

des mariages

INNER JOIN états comme s1 = ON weddings.WeddingState s1.StateId // état du mariage

INNER JOIN indique que s2 ON mariages.ContactState = s2.StateId // état de contact de la mariée

OERE weddings.weddingid = "094829292"

+0

Merci pour la réponse - J'ai essayé mais sans succès - Merci Scotty –

0

Merci Bill, j'ai ajouté le StateName ainsi

SELECT w. *,

s1.StateId AS WeddingStateId, 

s1.StateName AS WeddingStateName, 

s2.StateId AS ContactStateId, 

s2.StateName AS ContactStateName 

des mariages AS w

INNER JOIN états AS s1 = ON w.WeddingState s1.IdEtat

INNER JOIN états AS s2 = ON w.ContactState s2.StateId

Questions connexes