Проблем:
Искате да обедините таблици в множество колони, като използвате първичен съставен ключ в една таблица и външен съставен ключ в друга.
Пример:
Нашата база данни има три таблици с име student , enrollment , и payment . student таблицата има данни в следните колони:id (първичен ключ), first_name и last_name .
| id | first_name | фамилно_име |
|---|---|---|
| 1 | Ели | Уилсън |
| 2 | Том | Кафяв |
| 3 | Сандра | Милър |
enrollment таблицата има данни в следните колони:първичен ключ (student_id и course_code ), is_active и start_date .
| идентификатор_учен | код_курса | е_активен | начална_дата |
|---|---|---|---|
| 1 | GD03 | вярно | 20.01.2020 |
| 1 | AP01 | невярно | 10.03.2020 |
| 2 | SL01 | вярно | 05.05.2020 |
| 3 | SL01 | вярно | 01.06.2020 |
payment таблицата има данни в следните колони:външен ключ (student_id и course_code , първичните ключове на enrollment таблица), status и amount .
| идентификатор_учен | код_курса | статус | количество |
|---|---|---|---|
| 1 | GD03 | платено | 230 |
| 1 | AP01 | изчаква | 100 |
| 2 | SL01 | изчаква | 80 |
| 3 | SL01 | изчаква | 110 |
Нека покажем името на всеки ученик, кода на курса и състоянието на плащането и сумата.
Решение:
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;
| фамилно_име | first_name | код_курса | статус | количество |
|---|---|---|---|---|
| Уилсън | Ели | GD03 | платено | 230 |
| Уилсън | Ели | AP01 | изчаква | 100 |
| Кафяв | Том | SL01 | изчаква | 80 |
| Милър | Сандра | SL01 | изчаква | 110 |
Дискусия:
Ако искате да получите данни, съхранявани в таблици, обединени от комбиниран ключ, който е първичен ключ в една таблица и външен ключ в друга таблица, просто използвайте условие за свързване на множество колони.
В една обединена таблица (в нашия пример enrollment ), имаме първичен ключ, изграден от две колони (student_id и course_code ). Във втората таблица (payment ), имаме колони, които са чужд съставен ключ (student_id и course_code ). Как можем да обединим таблиците с тези съставни ключове?
Лесно! Трябва само да използваме JOIN клауза с повече от едно условие, като използвате оператора И след първото условие. В нашия пример използваме това условие:
p.course_code=e.course_code AND p.student_id=e.student_id
В първата част използваме student_id колона от enrollment таблица и student_id от payment маса. В следващото условие получаваме course_code колона от enrollment таблица и course_code от payment таблица.
Обърнете внимание, че student_id и course_code колони формират първичен ключ в enrollment маса. Следователно те се използват в payment таблица като външен ключ.