Unión SQL en una relación de uno a muchos
-
19-09-2019 - |
Pregunta
Ok, aquí estaba mi pregunta original;
La tabla uno contiene
ID|Name
1 Mary
2 John
La tabla dos contiene
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
quiero terminar con es
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
Parece que debido a que hay 11 valores únicos para el color y miles y miles de registros en la tabla uno, no existe una "buena" manera de hacer esto.Entonces, otras dos preguntas.
¿Existe una forma eficiente de realizar consultas para obtener este resultado?Luego puedo crear una tabla cruzada en mi aplicación para obtener el resultado deseado.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
Si quisiera limitar la cantidad de registros devueltos, ¿cómo podría hacer una consulta para hacer algo como esto?
Where ((color='blue') AND (color<>'red' OR color<>'green'))
Entonces, usando el ejemplo anterior, volvería
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
Me conecto a tablas de Visual FoxPro a través de ADODB para usar SQL.¡Gracias!
Solución
A partir de su pregunta anterior y consultar contra una tabla VFP, puede obtener sus resultados mediante la siguiente consulta calificada de VFP ...tabla cruzada completa
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
Luego, como tiene otros "colores", simplemente copie el MAX(IIF()) para ese color respectivo y tenga la columna como nombre de la columna de resultado...seguir el modelo.El único problema es que si tiene una ortografía diferente de los colores que distingue entre mayúsculas y minúsculas, es posible que necesite UPPER( C.Color ) = "RED" (o similar para otros colores)
Otros consejos
Se busca hacer una consulta de referencias cruzadas. Se podría tratar de utilizar el asistente de consulta de referencias cruzadas:
http://msdn.microsoft.com/en- es / library / aa979431% 28VS.71% 29.aspx