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

Come unire su più colonne

Problema:

Vuoi unire tabelle su più colonne utilizzando una chiave composta primaria in una tabella e una chiave composta esterna in un'altra.

Esempio:

Il nostro database ha tre tabelle denominate student , enrollment e payment . Lo student la tabella contiene dati nelle seguenti colonne:id (chiave primaria), first_name e last_name .

id nome cognome
1 Elli Willson
2 Tom Marrone
3 Sandra Mugnaio

La enrollment tabella contiene dati nelle seguenti colonne:chiave primaria (student_id e course_code ), is_active e start_date .

ID_studente codice_corso è_attivo data_inizio
1 GD03 vero 20-01-2020
1 AP01 falso 10-03-2020
2 SL01 vero 05-05-2020
3 SL01 vero 01-06-2020

Il payment tabella contiene dati nelle seguenti colonne:chiave esterna (student_id e course_code , le chiavi primarie della enrollment tabella), status e amount .

ID_studente codice_corso stato importo
1 GD03 pagato 230
1 AP01 in attesa 100
2 SL01 in attesa 80
3 SL01 in attesa 110

Mostriamo il nome di ogni studente, il codice del corso, lo stato del pagamento e l'importo.

Soluzione:

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;
cognome nome codice_corso stato importo
Willson Elli GD03 pagato 230
Willson Elli AP01 in attesa 100
Marrone Tom SL01 in attesa 80
Mugnaio Sandra SL01 in attesa 110

Discussione:

Se desideri ottenere i dati archiviati in tabelle unite da una chiave composta che è una chiave primaria in una tabella e una chiave esterna in un'altra tabella, usa semplicemente una condizione di join su più colonne.

In una tabella unita (nel nostro esempio, enrollment ), abbiamo una chiave primaria costruita da due colonne (student_id e course_code ). Nella seconda tabella (payment ), abbiamo colonne che sono una chiave composta esterna (student_id e course_code ). Come possiamo unire le tabelle con queste chiavi composte?

Facile! Dobbiamo solo usare un JOIN clausola con più di una condizione utilizzando l'operatore AND dopo la prima condizione. Nel nostro esempio, utilizziamo questa condizione:

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

Nella prima parte, utilizziamo lo student_id colonna dalla enrollment tabella e student_id dal payment tavolo. Nella condizione successiva, otteniamo il course_code colonna dalla enrollment tabella e course_code dal payment tabella.

Nota che lo student_id e course_code le colonne formano una chiave primaria nella enrollment tavolo. Pertanto, vengono utilizzati nel payment tabella come chiave esterna.