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íč.