Database
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Database

Cách tham gia trên nhiều cột

Vấn đề:

Bạn muốn nối các bảng trên nhiều cột bằng cách sử dụng khóa ghép chính trong một bảng và khóa ghép ngoại trong một bảng khác.

Ví dụ:

Cơ sở dữ liệu của chúng tôi có ba bảng có tên student , enrollmentpayment . student bảng có dữ liệu trong các cột sau:id (khóa chính), first_namelast_name .

id first_name last_name
1 Ellie Willson
2 Tom Màu nâu
3 Sandra Miller

enrollment bảng có dữ liệu trong các cột sau:khóa chính (student_idcourse_code ), is_activestart_date .

student_id course_code is_active start_date
1 GD03 đúng 2020-01-20
1 AP01 sai 2020-03-10
2 SL01 đúng 2020-05-05
3 SL01 đúng 2020-06-01

payment bảng có dữ liệu trong các cột sau:khóa ngoại (student_idcourse_code , các khóa chính của enrollment bảng), statusamount .

student_id course_code trạng thái số lượng
1 GD03 trả tiền 230
1 AP01 đang chờ xử lý 100
2 SL01 đang chờ xử lý 80
3 SL01 đang chờ xử lý 110

Hãy hiển thị tên, mã khóa học, trạng thái và số tiền thanh toán của từng học viên.

Giải pháp:

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 trạng thái số lượng
Willson Ellie GD03 trả tiền 230
Willson Ellie AP01 đang chờ xử lý 100
Màu nâu Tom SL01 đang chờ xử lý 80
Miller Sandra SL01 đang chờ xử lý 110

Thảo luận:

Nếu bạn muốn nhận dữ liệu được lưu trữ trong các bảng được nối bằng khóa ghép là khóa chính trong một bảng và khóa ngoại trong bảng khác, chỉ cần sử dụng điều kiện nối trên nhiều cột.

Trong một bảng đã kết hợp (trong ví dụ của chúng tôi, enrollment ), chúng tôi có một khóa chính được tạo từ hai cột (student_idcourse_code ). Trong bảng thứ hai (payment ), chúng tôi có các cột là khóa ghép ngoại (student_idcourse_code ). Làm cách nào chúng ta có thể nối các bảng với các khóa ghép này?

Dễ dàng! Chúng tôi chỉ cần sử dụng JOIN mệnh đề có nhiều hơn một điều kiện bằng cách sử dụng toán tử AND sau điều kiện đầu tiên. Trong ví dụ của chúng tôi, chúng tôi sử dụng điều kiện này:

p.course_code=e.course_code AND p.student_id=e.student_id

Trong phần đầu tiên, chúng tôi sử dụng student_id từ enrollment bảng và student_id từ payment bàn. Trong điều kiện tiếp theo, chúng ta nhận được course_code từ enrollment bảng và course_code từ payment bảng.

Lưu ý rằng student_idcourse_code các cột tạo thành khóa chính trong enrollment bàn. Do đó, chúng được sử dụng trong payment bảng làm khóa ngoại.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách so sánh ngày tháng trong SQL

  2. Cắt ngắn SQL

  3. Kích hoạt trong SQL

  4. Tính đúng đắn và ràng buộc

  5. Thiết kế Cơ sở dữ liệu Giúp Tổ chức Giáo viên, Bài học và Học sinh như thế nào?