Проблем:
Искате да обедините таблици в множество колони, като използвате първичен съставен ключ в една таблица и външен съставен ключ в друга.
Пример:
Нашата база данни има три таблици с име 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
таблица като външен ключ.