Database
 sql >> Base de Dados >  >> RDS >> Database

Como ingressar em várias colunas

Problema:


Você deseja unir tabelas em várias colunas usando uma chave composta primária em uma tabela e uma chave composta estrangeira em outra.

Exemplo:


Nosso banco de dados tem três tabelas chamadas student , enrollment e payment . O student tabela tem dados nas seguintes colunas:id (chave primária), first_name e last_name .
id first_name last_name
1 Ellie Wilson
2 Tom Marrom
3 Sandra Moleiro

A enrollment tabela tem dados nas seguintes colunas:chave primária (student_id e course_code ), is_active e start_date .
id_aluno course_code is_ativo data_inicial
1 GD03 verdadeiro 20-01-2020
1 AP01 falso 2020-03-10
2 SL01 verdadeiro 2020-05-05
3 SL01 verdadeiro 2020-06-01

O payment tabela tem dados nas seguintes colunas:chave estrangeira (student_id e course_code , as chaves primárias da enrollment tabela), status e amount .
id_aluno course_code estado quantidade
1 GD03 pago 230
1 AP01 pendente 100
2 SL01 pendente 80
3 SL01 pendente 110

Vamos mostrar o nome de cada aluno, o código do curso, o status e o valor do pagamento.

Solução:

SELECT
  s.last_name, s.first_name,
  p.course_code, p.status, p.amount
FROM enrollment e
JOIN student s
  ON s.id=e.student_id
JOIN payment p
  ON p.course_code=e.course_code
	AND p.student_id=e.student_id;
last_name first_name course_code estado quantidade
Wilson Ellie GD03 pago 230
Wilson Ellie AP01 pendente 100
Marrom Tom SL01 pendente 80
Moleiro Sandra SL01 pendente 110

Discussão:


Se você deseja obter dados armazenados em tabelas unidas por uma chave composta que é uma chave primária em uma tabela e uma chave estrangeira em outra tabela, basta usar uma condição de junção em várias colunas.

Em uma tabela unida (no nosso exemplo, enrollment ), temos uma chave primária construída a partir de duas colunas (student_id e course_code ). Na segunda tabela (payment ), temos colunas que são uma chave composta estrangeira (student_id e course_code ). Como podemos unir as tabelas com essas chaves compostas?

Fácil! Só precisamos usar um JOIN cláusula com mais de uma condição usando o operador AND após a primeira condição. Em nosso exemplo, usamos esta condição:

p.course_code=e.course_code AND p.student_id=e.student_id

Na primeira parte, usamos o student_id coluna da enrollment tabela e student_id do payment tabela. Na próxima condição, obtemos o course_code coluna da enrollment tabela e course_code do payment tabela.

Observe que o student_id e course_code colunas formam uma chave primária no enrollment tabela. Portanto, eles são usados ​​no payment tabela como chave estrangeira.