SQL Juntando-se em um um-para-muitos
-
19-09-2019 - |
Pergunta
Ok, aqui foi a minha pergunta original;
uma tabela contém
ID|Name
1 Mary
2 John
Table dois contém
ID|Color
1 Red
1 Blue
2 Blue
2 Green
2 Black
Eu quero acabar com
ID|Name|Red|Blue|Green|Black
1 Mary Y Y
2 John Y Y Y
Parece que porque existem 11 valores únicos para a cor e 1000, sobre 1000, de registros em uma tabela que não existe maneira 'bom' para fazer isso. Então, duas outras questões.
Existe uma maneira eficiente de consulta para obter este resultado? Posso, então, criar uma tabela de referência cruzada na minha candidatura para obter o resultado desejado.
ID|Name|Color
1 Mary Red
1 Mary Blue
2 John Blue
2 John Green
2 John Black
Se eu quisesse limitar o número de registros retornados como eu poderia fazer uma consulta para fazer algo assim?
Where ((color='blue') AND (color<>'red' OR color<>'green'))
Assim, usando o exemplo acima Eu, então, voltar
ID|Name|Color
1 Mary Blue
2 John Blue
2 John Black
eu ligar para tabelas do Visual FoxPro via ADODB para uso SQL. Obrigado!
Solução
Desde a sua pergunta anterior, e consulta contra uma tabela VFP, você pode obter os seus resultados por a seguinte consulta qualificado VFP ... cross-guia completo
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
Então, como você tem outras "cores", basta copiar o MAX (IIF ()) para que respectiva cor e ter a coluna como o nome da coluna resultado ... seguir o padrão. Apenas questão é se você tiver diferente ortografia caso sensitve das cores, então você pode precisar de UPPER (C.Color) = "RED" (ou similar para outras cores)
Outras dicas
Você está olhando para fazer uma consulta de referência cruzada. Você poderia tentar usar o assistente de consulta de referência cruzada:
http://msdn.microsoft.com/en- us / library / aa979431% 28VS.71% 29.aspx