sql >> Database >  >> RDS >> Database

Deelnemen aan meerdere kolommen

Probleem:

U wilt tabellen op meerdere kolommen samenvoegen door een primaire samengestelde sleutel in de ene tabel en een externe samengestelde sleutel in een andere te gebruiken.

Voorbeeld:

Onze database heeft drie tabellen met de naam student , enrollment , en payment . De student tabel bevat gegevens in de volgende kolommen:id (primaire sleutel), first_name , en last_name .

id voornaam achternaam
1 Ellie Willson
2 Tom Bruin
3 Sandra Miller

De enrollment tabel bevat gegevens in de volgende kolommen:primaire sleutel (student_id en course_code ), is_active , en start_date .

student_id course_code is_actief startdatum
1 GD03 waar 2020-01-20
1 AP01 false 2020-03-10
2 SL01 waar 05-05-2020
3 SL01 waar 2020-06-01

De payment tabel bevat gegevens in de volgende kolommen:refererende sleutel (student_id en course_code , de primaire sleutels van de enrollment tabel), status , en amount .

student_id course_code status bedrag
1 GD03 betaald 230
1 AP01 in behandeling 100
2 SL01 in behandeling 80
3 SL01 in behandeling 110

Laten we de naam, cursuscode en betalingsstatus en het bedrag van elke student tonen.

Oplossing:

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;
achternaam voornaam course_code status bedrag
Willson Ellie GD03 betaald 230
Willson Ellie AP01 in behandeling 100
Bruin Tom SL01 in behandeling 80
Miller Sandra SL01 in behandeling 110

Discussie:

Als u gegevens wilt opslaan in tabellen die zijn samengevoegd door een samengestelde sleutel die een primaire sleutel is in de ene tabel en een externe sleutel in een andere tabel, gebruikt u gewoon een join-voorwaarde voor meerdere kolommen.

In één samengevoegde tabel (in ons voorbeeld enrollment ), hebben we een primaire sleutel opgebouwd uit twee kolommen (student_id en course_code ). In de tweede tabel (payment ), hebben we kolommen die een buitenlandse samengestelde sleutel zijn (student_id en course_code ). Hoe kunnen we de tabellen samenvoegen met deze samengestelde sleutels?

Eenvoudig! We hoeven alleen een JOIN . te gebruiken clausule met meer dan één voorwaarde door de operator AND te gebruiken na de eerste voorwaarde. In ons voorbeeld gebruiken we deze voorwaarde:

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

In het eerste deel gebruiken we de student_id kolom uit de enrollment tabel en student_id van de payment tafel. In de volgende voorwaarde krijgen we de course_code kolom uit de enrollment tabel en course_code van de payment tafel.

Merk op dat de student_id en course_code kolommen vormen een primaire sleutel in de enrollment tafel. Daarom worden ze gebruikt bij de payment tabel als een externe sleutel.


  1. Multi-Statement TVF's in Dynamics CRM

  2. MariaDB RTRIM() vs RTRIM_ORACLE():wat is het verschil?

  3. FILE_ID() versus FILE_IDEX() in SQL Server:wat is het verschil?

  4. Android SQLiteOpenHelper:waarom wordt de methode onCreate() niet aangeroepen?