unendo 2 colonne dalla Tabella 1 alla Tabella 2
Domanda
Come faresti riferimento alle colonne della tabella1 a 2 colonne nella tabella 2
Ho creato una tabella " Stato " con 50 righe esatte
tentativo di relazionarsi (weddingState, contactState) nella tabella " Matrimonio "
Questa è la dichiarazione che ho creato, ma che unisce correttamente solo il WeddingState in alto - sembra non interessarsi al join INTERNO sotto di esso ...
SELEZIONA *
DA Matrimoni
INNER JOIN indica s1 ON matrimoni. WeddingState = s1.StateId // stato del matrimonio
INNER JOIN indica come s2 ON matrimoni.ContactState = s2.StateId // contatta lo stato della sposa
DOVE weddings.weddingid = " 094829292 "
Soluzione
Immagino che tu li stia recuperando in PHP o qualcosa del genere, e stai recuperando le righe in un hash-array, digitato dal nome del campo. Ovviamente può esserci solo un elemento in un hash con una determinata chiave. Quindi è necessario utilizzare gli alias di colonna per assicurarsi che alle colonne con lo stesso nome venga assegnato un alias distinto.
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";
Ora il tuo hash-array avrà le chiavi " wstate " e "cstate". Senza alias di queste colonne, una sovrascriverà sempre l'altra.
Altri suggerimenti
E cosa ottieni per il tuo risultato che ti porta alla tua conclusione?
Sarà un po 'confuso per i principianti perché i nomi dei campi nei due join, più alcuni dei nomi dei campi nella tabella principale, sono identici. È davvero una buona idea scegliere esplicitamente le colonne di output e fornire loro alias significativi.
Che ne dici di:
SELEZIONA s1.StateName, s2.StateName
DA Matrimoni
INNER JOIN indica come s1 ON matrimoni.WeddingState = s1.StateId // stato del matrimonio
INNER JOIN indica come s2 ON matrimoni.ContactState = s2.StateId // contatta lo stato della sposa
DOVE weddings.weddingid = " 094829292 "
Grazie Bill, ho aggiunto anche StateName
SELEZIONA w. *,
s1.StateId AS WeddingStateId,
s1.StateName AS WeddingStateName,
s2.StateId AS ContactStateId,
s2.StateName AS ContactStateName
DA Matrimoni COME
INNER JOIN indica AS s1 ON w.WeddingState = s1.StateId
INNER JOIN indica AS s2 ON w.ContactState = s2.StateId