sql >> Databáze >  >> RDS >> Database

Jak se připojit k více sloupcům

Problém:

Chcete spojit tabulky ve více sloupcích pomocí primárního složeného klíče v jedné tabulce a cizího složeného klíče v jiné.

Příklad:

Naše databáze má tři tabulky s názvem student , enrollment a payment . student tabulka obsahuje data v následujících sloupcích:id (primární klíč), first_name a last_name .

id křestní_jméno last_name
1 Ellie Willson
2 Tome Hnědá
3 Sandra Miller

enrollment tabulka obsahuje data v následujících sloupcích:primární klíč (student_id a course_code ), is_active a start_date .

id_studenta kurzový_kód je_aktivní počáteční_datum
1 GD03 pravda 20. 1. 2020
1 AP01 false 2020-03-10
2 SL01 pravda 2020-05-05
3 SL01 pravda 2020-06-01

payment tabulka obsahuje data v následujících sloupcích:cizí klíč (student_id a course_code , primární klíče enrollment tabulka), status a amount .

id_studenta kurzový_kód stav částka
1 GD03 zaplaceno 230
1 AP01 nevyřízeno 100
2 SL01 nevyřízeno 80
3 SL01 nevyřízeno 110

Ukážeme každému studentovi jméno, kód kurzu a stav platby a částku.

Řešení:

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;
last_name křestní_jméno kurzový_kód stav částka
Willson Ellie GD03 zaplaceno 230
Willson Ellie AP01 nevyřízeno 100
Hnědá Tome SL01 nevyřízeno 80
Miller Sandra SL01 nevyřízeno 110

Diskuse:

Pokud chcete získat data uložená v tabulkách spojených složeným klíčem, který je primárním klíčem v jedné tabulce a cizím klíčem v jiné tabulce, jednoduše použijte podmínku spojení pro více sloupců.

V jedné spojené tabulce (v našem příkladu enrollment ), máme primární klíč vytvořený ze dvou sloupců (student_id a course_code ). Ve druhé tabulce (payment ), máme sloupce, které jsou cizím složeným klíčem (student_id a course_code ). Jak můžeme spojit tabulky pomocí těchto složených klíčů?

Snadný! Potřebujeme pouze použít JOIN klauzuli s více než jednou podmínkou pomocí operátoru AND za první podmínkou. V našem příkladu použijeme tuto podmínku:

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

V první části používáme student_id ze sloupce enrollment tabulka a student_id z payment stůl. V další podmínce získáme course_code ze sloupce enrollment tabulka a course_code z payment tabulka.

Všimněte si, že student_id a course_code sloupce tvoří primární klíč v enrollment stůl. Proto se používají při payment tabulka jako cizí klíč.


  1. Odstraňte duplicitní řádky z malé tabulky

  2. SQLT v 12c Can't Gather Stats

  3. Databázový koutek:Průvodce pro začátečníky k úložišti Mysql

  4. Jak ROUND() funguje v MariaDB