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 "

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top