sql >> Databasteknik >  >> RDS >> Database

Hur man går med i flera kolumner

Problem:

Du vill sammanfoga tabeller i flera kolumner genom att använda en primär sammansatt nyckel i en tabell och en främmande sammansatt nyckel i en annan.

Exempel:

Vår databas har tre tabeller som heter student , enrollment och payment . student tabellen har data i följande kolumner:id (primär nyckel), first_name och last_name .

id förnamn efternamn
1 Ellie Willson
2 Tom Brun
3 Sandra Miller

enrollment tabellen har data i följande kolumner:primärnyckel (student_id och course_code ), is_active och start_date .

student_id kurskod är_aktiv startdatum
1 GD03 sant 2020-01-20
1 AP01 falskt 2020-03-10
2 SL01 sant 2020-05-05
3 SL01 sant 2020-06-01

payment tabellen har data i följande kolumner:främmande nyckel (student_id och course_code , de primära nycklarna för enrollment tabell), status och amount .

student_id kurskod status belopp
1 GD03 betald 230
1 AP01 väntande 100
2 SL01 väntande 80
3 SL01 väntande 110

Låt oss visa varje elevs namn, kurskod och betalningsstatus och belopp.

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;
efternamn förnamn kurskod status belopp
Willson Ellie GD03 betald 230
Willson Ellie AP01 väntande 100
Brun Tom SL01 väntande 80
Miller Sandra SL01 väntande 110

Diskussion:

Om du vill få data lagrade i tabeller sammanfogade av en sammansatt nyckel som är en primärnyckel i en tabell och en främmande nyckel i en annan tabell, använd helt enkelt ett sammanfogningsvillkor på flera kolumner.

I en sammanfogad tabell (i vårt exempel, enrollment ), har vi en primärnyckel byggd av två kolumner (student_id och course_code ). I den andra tabellen (payment ), har vi kolumner som är en främmande sammansatt nyckel (student_id och course_code ). Hur kan vi slå samman tabellerna med dessa sammansatta nycklar?

Lätt! Vi behöver bara använda en JOIN sats med mer än ett villkor genom att använda AND-operatorn efter det första villkoret. I vårt exempel använder vi detta villkor:

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

I den första delen använder vi student_id kolumnen från enrollment tabell och student_id från payment tabell. I nästa tillstånd får vi course_code kolumnen från enrollment tabell och course_code från payment bord.

Observera att student_id och course_code kolumner bildar en primärnyckel i enrollment tabell. Därför används de i payment tabell som en främmande nyckel.


  1. Vad är skillnaden mellan utf8_general_ci och utf8_unicode_ci?

  2. Använder jsonb_set() för att uppdatera specifikt jsonb-arrayvärde

  3. oracle jdbc drivrutin version galenskap

  4. Spring Batch - Det går inte att skapa metadatatabeller på Postgres och ladda faktiska data till mysql