选择表属性不是关系表的一部分

时间:2016-05-21 09:42:46

标签: java mysql sql

所以我正在寻找一种方法来选择不属于关系表的表的属性。

我有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

有一门课程的学生不应该被看见。

2 个答案:

答案 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