sql >> Database teknologi >  >> RDS >> Database

Sådan tilslutter du dig på flere kolonner

Problem:

Du vil forbinde tabeller på flere kolonner ved at bruge en primær sammensat nøgle i én tabel og en fremmed sammensat nøgle i en anden.

Eksempel:

Vores database har tre tabeller med navnet student , enrollment og payment . student tabellen har data i følgende kolonner:id (primær nøgle), first_name og last_name .

id fornavn efternavn
1 Ellie Willson
2 Tom Brun
3 Sandra Møller

enrollment tabellen har data i følgende kolonner:primærnøgle (student_id og course_code ), is_active og start_date .

student_id kursuskode er_aktiv startdato
1 GD03 sandt 2020-01-20
1 AP01 falsk 2020-03-10
2 SL01 sandt 2020-05-05
3 SL01 sandt 2020-06-01

payment tabellen har data i følgende kolonner:fremmednøgle (student_id og course_code , de primære nøgler til enrollment tabel), status og amount .

student_id kursuskode status beløb
1 GD03 betalt 230
1 AP01 afventer 100
2 SL01 afventer 80
3 SL01 afventer 110

Lad os vise hver elevs navn, kursuskode og betalingsstatus og beløb.

Løsning:

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;
efternavn fornavn kursuskode status beløb
Willson Ellie GD03 betalt 230
Willson Ellie AP01 afventer 100
Brun Tom SL01 afventer 80
Møller Sandra SL01 afventer 110

Diskussion:

Hvis du gerne vil have data gemt i tabeller sammenføjet af en sammensat nøgle, der er en primær nøgle i én tabel og en fremmednøgle i en anden tabel, skal du blot bruge en joinbetingelse på flere kolonner.

I én samlet tabel (i vores eksempel, enrollment ), har vi en primær nøgle bygget af to kolonner (student_id og course_code ). I den anden tabel (payment ), har vi kolonner, der er en fremmed sammensat nøgle (student_id og course_code ). Hvordan kan vi samle tabellerne med disse sammensatte nøgler?

Let! Vi skal bare bruge en JOIN klausul med mere end én betingelse ved at bruge AND-operatoren efter den første betingelse. I vores eksempel bruger vi denne betingelse:

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

I den første del bruger vi student_id kolonne fra enrollment tabel og student_id fra payment bord. I den næste tilstand får vi course_code kolonne fra enrollment tabel og course_code fra payment tabel.

Bemærk, at student_id og course_code kolonner danner en primær nøgle i enrollment bord. Derfor bruges de i payment tabel som en fremmednøgle.


  1. Hvordan genererer man automatisk migreringer med Sequelize CLI fra Sequelize-modeller?

  2. Sådan forbinder du to borde i MySQL

  3. Auto Generer Database Diagram MySQL

  4. Normalisering i MYSQL