問題:
あるテーブルでプライマリ複合キーを使用し、別のテーブルで外部複合キーを使用して、複数の列でテーブルを結合したい。
例:
私たちのデータベースには、student 、enrollment 、およびpayment 。 student テーブルの次の列にデータがあります:id (主キー)、first_name 、およびlast_name 。
| id | first_name | last_name |
|---|---|---|
| 1 | エリー | ウィルソン |
| 2 | トム | ブラウン |
| 3 | サンドラ | ミラー |
enrollment テーブルの次の列にデータがあります:主キー(student_id およびcourse_code )、is_active 、およびstart_date 。
| student_id | course_code | is_active | start_date |
|---|---|---|---|
| 1 | GD03 | true | 2020-01-20 |
| 1 | AP01 | false | 2020-03-10 |
| 2 | SL01 | true | 2020-05-05 |
| 3 | SL01 | true | 2020-06-01 |
payment テーブルの次の列にデータがあります:外部キー(student_id およびcourse_code 、enrollment 表)、status 、およびamount 。
| student_id | course_code | ステータス | 金額 |
|---|---|---|---|
| 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;
| last_name | first_name | course_code | ステータス | 金額 |
|---|---|---|---|---|
| ウィルソン | エリー | GD03 | 有料 | 230 |
| ウィルソン | エリー | AP01 | 保留中 | 100 |
| ブラウン | トム | SL01 | 保留中 | 80 |
| ミラー | サンドラ | SL01 | 保留中 | 110 |
ディスカッション:
テーブルに格納されているデータを、あるテーブルの主キーと別のテーブルの外部キーである複合キーで結合する場合は、複数の列で結合条件を使用するだけです。
1つの結合されたテーブル(この例では、enrollment )、2つの列(student_id)から構築された主キーがあります およびcourse_code )。 2番目の表(payment )、外部複合キー(student_id)である列があります およびcourse_code )。これらの複合キーを使用してテーブルを結合するにはどうすればよいですか?
簡単! JOINを使用するだけです 最初の条件の後にAND演算子を使用して、複数の条件を持つ句。この例では、次の条件を使用します:
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 外部キーとしてのテーブル。