所以我正在寻找一种方法来选择不属于关系表的表的属性。
我有3个表,课程,学生和关系表StudentCourse。 StudentCourse具有外键courseid和personid,它们是其他表中的主键。
我想知道我是否可以通过sqlquery选择不属于课程的学生。
编辑:
学生。 列: 学生id varchar主键 姓名和姓氏varchar
场。 列: course id int auto-increment 课程名称
StudentCourse courseid int主键外键 studentid varchar主键外键
这不是正确的代码,但它可以帮助您理解表格的各个部分。
我试过了:
SELECT Student.studentid FROM Student INNER JOIN StudentCourse ON Student.studentid = StudentCourse.studentid WHERE StudentCourse.studentid ='null';
这显然不起作用。我还尝试将关系表与学生表进行比较,看看StudentCourse表中是否存在学生ID。
如果我从StudentCourse中选择*,我会得到所有有课程的学生。 例如: courseid:1 studentid:199502159292
现在我想从学生表中选择所有没有课程的学生
例如: studentid:199909091414姓名:carl姓:peterson
有一门课程的学生不应该被看见。
答案 0 :(得分:0)
要选择所有注册课程的学生,您可以这样做:
SELECT student_id
FROM StudentCourse
WHERE course_id=*<value>*
我选择了最简单的方法,即通过ID进行选择。如果您需要按名称或其他课程列进行选择,则应使用:
SELECT sc.student_id
FROM StudentCourse AS sc
INNER JOIN Course AS c ON sc.course_id=c.course_id
WHERE c.course_name=*<value>*
现在,完整的查询:
SELECT *
FROM Student AS s
WHERE s.student_id NOT IN (
SELECT student_id
FROM StudentCourse
WHERE course_id=*<value>*
)
这将选择Students表中未注册课程的所有学生。
答案 1 :(得分:0)
以下查询将返回学生详细信息,那些不属于课程的人员:
SELECT ST.*
FROM Student ST
LEFT JOIN StudentCourse SC ON SC.StudentId = ST.StudentId
WHERE SC.StudentId IS NULL