我的查询出了什么问题?

时间:2014-11-04 16:58:23

标签: sql join

with StudentTakes (name, id, course_id) as (
    select name, student.id, course_id
    from takes join student on takes.id = student.id
)
select distinct name, id 
from StudentTakes a
where a.name in (
    select b.name 
    from StudentTakes b
    where b.name = a.name and b.id <> a.id and a.course_id = b.course_id
)
order by name;

我想找到nameID的学生,每个学生的名字与其他学生的名字相同,而且同名学生必须在班级中学习相同的course_id。表格takes包含IDcourse_id。表格学生包含IDname。具有相同名称的学生总数 788 ,上述查询的结果为755.有人可以解释为什么当我更改上面的代码时,结果为 788 < / strong>即可。

with StudentTakes (name, id, course_id) as (
    select name, student.id, course_id
    from takes join student on takes.id = student.id
)
select distinct name, id 
from StudentTakes a
where a.name in (
    select b.name 
    from StudentTakes b
    where b.name = a.name and b.id <> a.id and a.course_id <> b.course_id -- CHANGE
)
order by name;

1 个答案:

答案 0 :(得分:0)

您的查询似乎在告诉您

  1. 有755名学生与另一名具有相同名称的学生(第一次查询)同一班级,并且
  2. 每个与另一名同名的788名学生至少参加一个至少有一个不被另一个同名学生(第二个查询)学习的班级。
  3. 这些结果本身并不一致。