我可以通过对我的SQL代码使用foreach
或for
循环来解决这个问题,但我不想这样做。我知道我的答案可能只有一个SQL代码。
https://stackoverflow.com/a/2923921/1932414
在这个多关系的答案中,我可以通过给定的学生ID或课程ID来获得学生或课程。
但如何通过给定不同的学生ID来实现课程?我不想找一个学生,但是很多学生。
这是我的表结构与给出的答案相同。
CREATE TABLE `Student` (
`StudentID` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`FirstName` VARCHAR(25),
`LastName` VARCHAR(25) NOT NULL,
PRIMARY KEY (`StudentID`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `Course` (
`CourseID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT,
`Code` VARCHAR(10) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL,
`Name` VARCHAR(100) NOT NULL,
PRIMARY KEY (`CourseID`)
) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ci
CREATE TABLE `CourseMembership` (
`Student` INT UNSIGNED NOT NULL,
`Course` SMALLINT UNSIGNED NOT NULL,
PRIMARY KEY (`Student`, `Course`),
CONSTRAINT `Constr_CourseMembership_Student_fk`
FOREIGN KEY `Student_fk` (`Student`) REFERENCES `Student` (`StudentID`)
ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `Constr_CourseMembership_Course_fk`
FOREIGN KEY `Course_fk` (`Course`) REFERENCES `Course` (`CourseID`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci
例如:
1,5,78,32,54,7,44名学生必须给我他们的课程。如何使用JOIN
?
答案 0 :(得分:1)
我稍微修改了Hammerite's answer以与多个ID一起使用:
查找注册课程的所有学生:
选择
Student
。* FROMStudent
加入CourseMembership
Student
。StudentID
=CourseMembership
。Student
WHERECourseMembership
。Course
in(1,5,78,32,54,7,44)查找特定学生的所有课程:
选择
Course
。* FROMCourse
加入CourseMembership
Course
。CourseID
=CourseMembership
。Course
WHERECourseMembership
。Student
in(13,52,178,312,4,27,464)
注意粗体部分作为我的编辑。
答案 1 :(得分:1)
试一试 -
SELECT st.studentid,st.first_name,cs.course_id,cs.course_name
FROM student st
JOIN coursemembership csm ON csm.student=st.studentid
JOIN course cs ON cs.courseid=csm.course
WHERE st.studentid IN (1,5,78,32,54,7,44);
答案 2 :(得分:0)
为什么不简单地调用类似
的内容SELECT student_id
FROM Students_Courses
WHERE course_id = desired_course_id
除非我误解了你想要获得的内容,否则这将为你提供所有student_ids表格,供你学习的课程使用。
答案 3 :(得分:0)
我没有原始数据来检查这是否有效。如果它适合你,请试试这个
SELECT A.StudentID, CONCAT(A.FirstName, A.LastName) AS 'Name' , B.CourseID, B.Code, B.Name
FROM Student A, Course B, CourseMembership C
WHERE A.StudentID=C.Student AND B.CourseID=C.Course
AND A.Student IN (1,5,78,32,54,7,44);