Bạn muốn sử dụng chức năng MySQL gọi là Group_concat để đạt được điều này. Truy vấn của bạn sẽ trông giống như thế này:
SELECT courseName, group_concat(teacherName) FROM teacher, course, courses_has_teachers WHERE courses_has_teachers.teacher_id = teacher.id AND course.id = courses_has_teachers.course.id GROUP BY courseNameTôi đã viết lại truy vấn này ở định dạng ANSI-92, mà bạn có thể không quen thuộc, nhưng có thể thực hiện các truy vấn có nhiều lần đọc dễ đọc hơn nhiều:
SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query GROUP BY courseNameNgoài ra, bạn có thể muốn đọc một câu hỏi và trả lời dài mà tôi đã viết mà bạn có thể thấy hữu ích.
Khi bạn làm việc với cơ sở dữ liệu của mình, bạn có thể cần phải kết hợp dữ liệu từ một vài bảng khác nhau. Bài viết này sẽ chỉ cho bạn cách. Tôi đã viết về SQL tham gia ở đây và ở đây, nhưng chúng ta hãy dành một chút thời gian để xem xét cách tham gia hoạt động đầu tiên và đặc biệt là cú pháp cụ thể cho MySQL. Tham gia là một tuyên bố cho phép bạn kết hợp hai bảng, phù hợp với các hàng có liên quan với nhau và chỉ giữ các hàng có thể phù hợp, không giữ các hàng không ghép đôi. Câu lệnh SELECT ... FROM chỉ ra đó là bảng đầu tiên, sau đó tên bảng thứ hai được viết ngay sau các từ khóa INNER JOIN.Tuyên bố tham gia SQL
Làm thế nào hai bảng nên được tham gia được viết trong tuyên bố ON. Trong trường hợp này, hai bảng được tham gia bằng mối quan hệ table1.id = table2.id.
Có thể sử dụng nhiều câu lệnh tham gia cùng nhau để tham gia nhiều hơn một bảng cùng một lúc.
SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id INNER JOIN table3 ON table2.id = table3.id; Genereric Nội tâm Câu lệnh giữa ba bảngĐể làm điều đó, bạn thêm một câu lệnh INNER JOIN thứ hai và câu lệnh ON thứ hai để chỉ ra bảng thứ ba và mối quan hệ thứ hai.
Hãy nói một chút về các mối quan hệ bạn có thể có giữa các bảng và lý do tại sao bạn có thể muốn tham gia ba bảng với nhau.
Mối quan hệ giữa các bảng trong SQL
Khi bạn có các bảng có liên quan với nhau, các mối quan hệ của họ có thể là một trong những loại khác nhau.
one-to-many
Trong một loại mối quan hệ một-nhiều, một hàng của bảng thứ nhất có thể liên quan đến nhiều hàng của bảng thứ hai.
Trong một cơ sở dữ liệu quan hệ, điều này có thể được triển khai với bảng thứ hai có cột SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query GROUP BY courseName 1 cho biết hàng nào của bảng đầu tiên có liên quan.
many-to-one
Trong một loại mối quan hệ nhiều-một, một hàng của bảng thứ nhất có thể liên quan đến một hàng của bảng thứ hai và một hàng của bảng thứ hai có thể liên quan đến nhiều hàng của bảng thứ nhất.
Trong một cơ sở dữ liệu quan hệ, điều này có thể được triển khai với bảng đầu tiên có cột SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query GROUP BY courseName 2 cho biết hàng nào của bảng thứ hai có liên quan.
many-to-many
Trong trường hợp này, nhiều hàng có liên quan đến nhiều hàng.
Kiểu mối quan hệ này không thể được thể hiện như với các bảng SQL-bạn cần thêm một bảng khớp nối giữa hai bảng để chỉ có các mối quan hệ nhiều đến một và một đến nhiều giữa các bảng.
Mỗi hàng của bảng ở giữa đại diện cho một mối quan hệ giữa các hàng của bảng bên trái và các hàng của bảng bên phải.
Trong thực tế trong MySQL, bảng giữa đó sẽ có một cột cho SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query GROUP BY courseName 1 và một cột cho SELECT courseName, group_concat(teacherName) FROM teacher join course on courses_has_teachers.teacher_id = teacher.id join courses_has_teachers on course.id = courses_has_teachers.course.id WHERE // Any conditions you want on the query GROUP BY courseName 2, với mỗi kết hợp là duy nhất.
Tham gia các bảng SQL trong thực tế
Hãy tưởng tượng chúng tôi có cơ sở dữ liệu của một tổ chức, nơi chúng tôi có một bảng với các nhóm (tên của họ và thông tin nhận dạng khác) và một bảng với các dự án (tên, tiến trình, v.v.).
1 | Ném chuối | Chuối |
2 | Gỗ gỗ | Gặm gỗ |
3 | Những con voi màu hồng | Dậm chân trên mặt đất |
4 | Khoai tây lông tơ | Làm việc và ngủ |
1 | Ném chuối | Chuối |
2 | Gỗ gỗ | Gặm gỗ |
3 | Những con voi màu hồng | Dậm chân trên mặt đất |
Khoai tây lông tơ
1 | 2 |
1 | 3 |
2 | 1 |
3 | 1 |
3 | 2 |
3 | 3 |
3 | 4 |
Làm việc và ngủ
SELECT teams.team_name AS team_name, projects.project_name AS project_name FROM TABLE teams INNER JOIN matches ON teams.id = matches.team_id INNER JOIN matches ON matches.project_id = projects.id ORDER BY teams.id;tiến triển
Tòa nhà đập
Một số gặm gỗ và dậm chân trên mặt đất cần thiết
Bánh chuối
Ai đó đang ăn tất cả chuối
Ném chuối | Bánh chuối |
Ném chuối | Nghiên cứu về giấc ngủ |
Gỗ gỗ | Đập bulding |
Gỗ gỗ | Nghiên cứu về giấc ngủ |
Gỗ gỗ | Đập bulding |
Gỗ gỗ | Đập bulding |
Những con voi màu hồng | Nghiên cứu về giấc ngủ |
Gỗ gỗ
Đập bulding
Những con voi màu hồng
Tòa nhà đập
Khoai tây lông tơ