SQL Joining su una relazione uno-a-molti
-
19-09-2019 - |
Domanda
Ok, ecco la mia domanda iniziale;
La tabella uno contiene
ID|Name
1 Mary
2 John
La tabella due contiene
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
Voglio finire con è
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
Sembra che, poiché ci sono 11 valori univoci per il colore e migliaia di record nella tabella uno, non esista un modo "buono" per farlo.Allora, altre due domande.
Esiste un modo efficiente per eseguire una query per ottenere questo risultato?Posso quindi creare una tabella incrociata nella mia applicazione per ottenere il risultato desiderato.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
Se volessi limitare il numero di record restituiti, come potrei eseguire una query per fare qualcosa del genere?
Where ((color='blue') AND (color<>'red' OR color<>'green'))
Quindi, usando l'esempio sopra, tornerei indietro
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
Mi collego alle tabelle Visual FoxPro tramite ADODB per utilizzare SQL.Grazie!
Soluzione
Dalla tua domanda precedente e interrogando su una tabella VFP, è possibile ottenere i risultati mediante la seguente query qualificata VFP ...tabella incrociata completata
select
N.ID,
N.Name,
MAX( IIF( C.Color = "Red", "Y", " " )) Red,
MAX( IIF( C.Color = "Blue", "Y", " " )) Blue,
MAX( IIF( C.Color = "Green", "Y", " " )) Green,
MAX( IIF( C.Color = "Black", "Y", " " )) Black
FROM
C_Names N,
Colors C
WHERE
N.ID = C.ID
GROUP BY
N.ID,
N.Name
Quindi, poiché hai altri "colori", copia semplicemente MAX( IIF()) per quel rispettivo colore e imposta la colonna come nome della colonna dei risultati...Segui lo schema.L'unico problema è che se hai un'ortografia diversa con distinzione tra maiuscole e minuscole dei colori, potrebbe essere necessario UPPER( C.Color ) = "RED" (o simile per altri colori)
Altri suggerimenti
Si sta cercando di fare una query a campi incrociati. Si potrebbe provare a utilizzare la Creazione guidata Query a campi incrociati:
http://msdn.microsoft.com/en- us / library / aa979431% 28VS.71% 29.aspx