問題:
あるテーブルでプライマリ複合キーを使用し、別のテーブルで外部複合キーを使用して、複数の列でテーブルを結合したい。
例:
私たちのデータベースには、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
外部キーとしてのテーブル。