Sql 在where子句中编写子查询

Sql 在where子句中编写子查询,sql,Sql,我有下列表格 student(student_id, name) assignment(student_id, course_code, assignment number) 我正试图写一个查询,返回那些提交了某一特定课程的作业1但没有提交作业2的学生 我已经写了下面的查询,但是很难理解,因为它会根据每个课程返回结果。有什么建议吗 SELECT name, a.student_id, course_code FROM assignment a INNER JOIN student s on a

我有下列表格

student(student_id, name)
assignment(student_id, course_code, assignment number)
我正试图写一个查询,返回那些提交了某一特定课程的作业1但没有提交作业2的学生

我已经写了下面的查询,但是很难理解,因为它会根据每个课程返回结果。有什么建议吗

SELECT name, a.student_id, course_code
FROM assignment a INNER JOIN student s
on a.student_id = s.student_id
WHERE assignment_number = 1
AND assignment_number != 2
下面是一把小提琴,让我们看到它的作用:

下面是一把小提琴,让我们看到它的作用: 已完成作业1但未完成作业2的学生名单:

select s.name, a.student_id, a.course_code
from assignment a
inner join student  s on a.student_id = s.student_id
where a.student_id in 
    (Select student_id from assignment
    where assignment_id = 1) -- All students that submitted Assignment 1
and a.assignment_id !=2
已完成作业1但未完成作业2的学生名单:

select s.name, a.student_id, a.course_code
from assignment a
inner join student  s on a.student_id = s.student_id
where a.student_id in 
    (Select student_id from assignment
    where assignment_id = 1) -- All students that submitted Assignment 1
and a.assignment_id !=2

这是正确的,只是您使用的是
不存在
,然后是
!=2
这是正确的,除了您正在使用的
不存在
!=2
SELECT 
  s.name, 
  s.student_id, 
  a.course_code
FROM 
  assignment a 
INNER JOIN 
  student s
ON 
  a.student_id = s.student_id
WHERE 
  assignment_number in( 1,2 ) 
GROUP BY 
  s.name, 
  s.student_id, 
  a.course_code
HAVING max(assignment_number) = 1