java - 选择不属于关系表一部分的表属性

标签 java mysql sql

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

我有 3 个表:Course、Student 和关系表 StudentCourse。 StudentCourse 具有外键 courseid 和 personid,它们是其他表中的主键。

我想知道是否可以通过sqlquery选择不属于类(class)的学生。

编辑:

学生。 列: 学生 ID varchar 主键 姓名 varchar

当然。 列: 类(class) ID int 自增 类(class)名称

学生类(class) courseid int 主键外键 Studentid varchar 主键外键

这不是正确的代码,但它应该可以帮助您理解表格的各个部分。

我已经尝试过:

SELECT Student.studentid FROM Student INNER JOIN StudentCourse ON Student.studentid = StudentCourse.studentid WHERE StudentCourse.studentid ='null';

这显然行不通。我还尝试将关系表与学生表进行比较,看看学生 ID 是否不存在于 StudentCourse 表中。

如果我从 StudentCourse 中选择 *,我会得到所有有类(class)的学生。 前任: 类(class)ID:1 学生ID:199502159292

现在我想从学生表中选择所有没有类(class)的学生

例如: 学生号:199909091414 姓名:卡尔 姓:彼得森

有类(class)的学生不应该是可见的。

最佳答案

要选择注册类(class)的所有学生,您可以执行以下操作:

SELECT student_id
FROM StudentCourse
WHERE course_id=*<value>*

我选择了最简单的方法,即通过ID选择。如果您需要按名称或其他类(class)列进行选择,您应该使用:

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>*
)

这将选择学生表中未注册类(class)的所有学生。

关于java - 选择不属于关系表一部分的表属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37361266/

相关文章:

php - MySQL/PHP : how to display only one category with related items

sql - T-SQL/XML 查询,获取查询中每一行的子字段以及整个元素

php - foreach 循环跳过 3 个项目中的前 2 个

java - oreo 和 pie 中的后台服务问题

java - 删除 jsoup 中选定 id 元素的除第一个 div 之外的所有 div

java - 如何制作每行多行的表格?

java - Cucumber Java - JUnit 在命令行上设置单色

MySQL每小时​​选择平均读数,即使没有读数

mysql - 在sql查询中使用exists的两种情况

mysql - mysql高级排序,根据action id排序