-1

我正在尝试编写返回我 subject_id(result table) 的 sql 查询,其中 primary_skill(student table) 是唯一的。

结果表有列(student_id、subject_id、mark)

我的查询:

SELECT r.subject_id 
FROM result r 
  JOIN student s ON r.student_id = s.student_id 
WHERE s.primary_skill IN (SELECT DISTINCT primary_skill 
                          FROM student) 
GROUP BY 1;

我有这个结果:

subject_id
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    1001

但我应该只返回 id 1001,因为只有这个主题有独特的学生 primary_skill,在其他 id 中主要技能是重复的。

我究竟做错了什么?它如何改善?

4

2 回答 2

1

请尝试以下操作:

select result.subject_id from student join result on student.id =result.student_id where student.primary_skill in (select primary_skill from student group by primary_skill having COUNT(*)=1)

于 2019-04-11T10:44:15.747 回答
0

如果我理解正确,您希望学生只拥有一项技能的结果。为此,您可以使用GROUP BY一个HAVING子句来检查技能计数是否等于 1。

SELECT r.subject_id
       FROM result r
            INNER JOIN (SELECT s.student_id
                               FROM student s
                               GROUP BY s.student_id
                               HAVING count(DISTINCT s.primary_skill) = 1) x
                       ON x.student_id = r.student_id;
于 2019-04-11T10:44:27.937 回答