Tenho as seguintes tabelas:
StaffName
============================================================================
| Name | Income_Group | Educational_Level | Country |
============================================================================
| Jack | 5 | 5 | 1 |
| Jill | 3 | 3 | 4 |
| Jane | 1 | 4 | 6 |
| June | 4 | 2 | 7 |
============================================================================
País
==================================================
| ID | Country | Country_Description |
==================================================
| 1 | America | |
| 7 | Japan | |
==================================================
Grupo de renda
=======================================================
| ID | Income_Range | Description |
=======================================================
| 1 | Below US$2500 | |
| 5 | US$9000 to US$12000 | |
=======================================================
Nível educacional
============================================================
| ID | Educational_Level | Country_Description |
============================================================
| 1 | PhD | |
| 7 | Master | |
============================================================
Minha intenção é obter todos os valores de outra tabela para a tabela principal e exibir algo como o seguinte:
Resultado Pretendido
=======================================================================================
| Name | Income_Group | Educational_Level | Country |
=======================================================================================
| John | US$9000 to US$12000 | PhD | America |
| KoKo | US$5000 to US$7000 | Master | Japan |
| Kane | US$1000 to US$2000 | B.Degree | Thailand |
| Ali | US$8200 to US$9200 | College | Malaysia |
=======================================================================================
Tentei usar o seguinte sql:
select
s.name, s.Income_Group, s.Educational_Level, s.Country
from
StaffName s, Country c. IncomeGroup ig, EducationalLevel el
where
s.Income_Group = c.ID
AND s.Educational_Level = ig.id
AND s.Country = el.id
Mas não retorna nenhum resultado.
Não há chaves estrangeiras ou primárias para todas as tabelas.
O que eu poderia estar perdendo?
Parece que parte da sua sintaxe não está totalmente correta na pergunta, mas pode ser apenas um erro de digitação. Parece também que você está tentando usar o método antigo de unir tabelas.
Observei também que você está tendo que retornar registros de
StaffName
onde não há correspondências (nulos?) com as outras tabelas. Para unir ainda e mostrar apenas espaços em branco onde não há correspondências, você precisará usar uma junção externa. Para simplificar, usei apenasLEFT
junções no exemplo abaixo.Além disso, observe que retornei os campos apropriados em sua lista de seleção, referenciando as tabelas unidas, para obter o resultado conforme mostrado em seu requisito
Para entender melhor as junções esquerdas, aqui está um trecho do BOL.
Suspeito que sua declaração sobre chaves primárias e chaves estrangeiras seja apenas para dizer que não precisamos nos preocupar com o efeito que isso pode ter em suas junções. Você pode ter suas razões para isso, mas lembre-se de que ter chaves primárias adequadas é fundamentalmente importante para qualquer banco de dados.
Se você quiser ter o peixe hoje, pode usar a consulta de Confúcio e certamente funcionará bem.
Se você espera aprender a pescar sozinho, pode dar uma olhada nos livros de SQL para resolver problemas semelhantes que surgirão em breve. Posso recomendar Learning SQL de Alan Baulieu como um bom começo.
Além disso, nenhuma chave primária é uma escolha ou uma restrição que você deve enfrentar?