Database
 sql >> Base de données >  >> RDS >> Database

Comment joindre sur plusieurs colonnes

Problème :

Vous souhaitez joindre des tables sur plusieurs colonnes en utilisant une clé composée primaire dans une table et une clé composée étrangère dans une autre.

Exemple :

Notre base de données comporte trois tables nommées student , enrollment , et payment . L'student la table contient des données dans les colonnes suivantes :id (clé primaire), first_name , et last_name .

identifiant prénom nom_de_famille
1 Élie Willson
2 Tom Marron
3 Sandra Miller

Le enrollment la table contient des données dans les colonnes suivantes :clé primaire (student_id et course_code ), is_active , et start_date .

identifiant_étudiant code_cours is_active date_début
1 GD03 vrai 2020-01-20
1 AP01 faux 2020-03-10
2 SL01 vrai 2020-05-05
3 SL01 vrai 2020-06-01

Le payment la table contient des données dans les colonnes suivantes :clé étrangère (student_id et course_code , les clés primaires de l'enrollment tableau), status , et amount .

identifiant_étudiant code_cours statut montant
1 GD03 payé 230
1 AP01 en attente 100
2 SL01 en attente 80
3 SL01 en attente 110

Montrons le nom de chaque étudiant, le code du cours, ainsi que l'état et le montant du paiement.

Solution :

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;
nom_de_famille prénom code_cours statut montant
Willson Élie GD03 payé 230
Willson Élie AP01 en attente 100
Marron Tom SL01 en attente 80
Meunier Sandra SL01 en attente 110

Discussion :

Si vous souhaitez obtenir des données stockées dans des tables jointes par une clé composée qui est une clé primaire dans une table et une clé étrangère dans une autre table, utilisez simplement une condition de jointure sur plusieurs colonnes.

Dans une table jointe (dans notre exemple, enrollment ), nous avons une clé primaire construite à partir de deux colonnes (student_id et course_code ). Dans le deuxième tableau (payment ), nous avons des colonnes qui sont une clé étrangère composée (student_id et course_code ). Comment joindre les tables avec ces clés composées ?

Facile! Nous avons juste besoin d'utiliser un JOIN clause avec plus d'une condition en utilisant l'opérateur AND après la première condition. Dans notre exemple, nous utilisons cette condition :

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

Dans la première partie, nous utilisons le student_id colonne du enrollment table et student_id du payment table. Dans la condition suivante, nous obtenons le course_code colonne du enrollment tableau et course_code du payment tableau.

Notez que le student_id et course_code les colonnes forment une clé primaire dans le enrollment table. Par conséquent, ils sont utilisés dans le payment table comme clé étrangère.