当前位置: 首页 > 知识库问答 >
问题:

SQL-检查一组类似记录中的任何记录是否匹配ID

空翼
2023-03-14

我想让没有学过杰伦教授的任何课程的学生。从下面的表格中,所有的学生至少有一门课程是由杰伊教授的。因此,查询需要返回空值。

SELECT s.*
FROM student AS s
JOIN enroll AS e ON s.student_id = e.student_id
WHERE e.course_id NOT IN ("c001")

由于Phil(s001)参加了Jay教授的课程,我原本以为它会返回空记录。因为他有两门课程,由Gloria担任讲师,所以它会返回Phil。我不知道如何从一组类似记录(相同student_id,不同course_id)中检查任何记录是否与某个

共有3个答案

辛健
2023-03-14

使用左联接和子查询

select s.*
from student s
left join (
  select e.student_id, c.course_id, c.name cname, l.lecturer_id, l.name lname
  from enroll e
  join course c on e.course_id = c.course_id
  join lecturer l on c.lecturer_id = l.lecturer_id
  where l.name = 'Jay'
) ecl on s.student_id = ecl.student_id
where ecl.student_id is null
王涵育
2023-03-14

将< code>group_by student_id,并选择那些< code >具有正值的未注册到“c001”中

select s.*, sum(case when course_id in ("c001") then 1 else 0 end) = 0 not_jay
from student s join enroll e on e.student_id = s.student_id
group by s.student_id
having not_jay > 0
;

详细的SQL拨弄在这里

查修谨
2023-03-14

你的问题是问哪些学生除了‘c001’还有课,这是一个不同的问题。不要考虑集合,我想看看除了选修课程“c001”的学生之外的所有学生:

select name
from student
where student_id not in (
  select student_id from enroll where course_id = 'c001'
)

我为您创建了在db-fiddle.com运行该查询所需的最小模式。

下一步是用讲师姓名(未测试)条件替换内部查询:

select student_id
from lecturer
join course using (lecturer_id)
join enroll using (course_id)
where lecturer.name = 'Jay'
 类似资料:
  • 问题内容: 我是Laravel的新手。请原谅新手问题,但是如何查找记录是否存在? 我在这里可以查看是否有记录? 问题答案: 这取决于您之后是否要与用户一起使用,还是仅检查是否存在。 如果要使用用户对象(如果存在): 如果您只想检查 甚至更好

  • 我是拉雷维尔的新手。请原谅这个新手的问题,但是我如何找到是否存在记录? 我可以在这里做什么来查看是否有记录?

  • 问题内容: 我正在尝试根据特定的ID查询数据库。 如果这是第一次运行该活动,则该表将与id列一起存在,但是将不存在具有特定id的记录。如何检查该特定记录是否存在,如果不存在,则添加它?我发现有关检查特定列是否存在的很多信息,但与检查特定记录是否存在无关。 到目前为止,我已经尝试获取id列索引并检查它是否返回-1,但是由于某种原因,它实际上正在返回1。我可以在if语句中使用什么来验证尚未创建id列?

  • 问题内容: 我必须每20秒阅读一次CSV。每个CSV都包含最小值。500至最大 60000行。我必须将数据插入Postgres表中,但是在此之前,我需要检查是否已插入项目,因为很有可能会获得重复的项目。检查唯一性的字段也已建立索引。 因此,我分块读取文件,并使用IN子句获取数据库中已有的项目。 有更好的方法吗? 问题答案: 这应该表现良好: 与这个答案密切相关。

  • 问题内容: 有没有一种方法可以检查我是否在最后一条记录上?谢谢 问题答案: 使用此模式来标识和处理结果的最后一行:

  • 假设我有一个员工姓名列表,我想选择具有这些姓名的所有行: 也许简和乔不在这张桌子上。我如何创建一个查询来标识我的列表中根本不存在的项目。 我不是在寻找任何特定的格式作为返回的结果;它可以是逗号分隔的,也可以是具有各自不匹配名称的行列表。