postgresql 如何根据一个表中的不同值从另一个表中获取值?

mspsb9vt  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(2)|浏览(204)

我正在尝试写SQL查询,返回subject_id(结果表),其中primary_skill(学生表)是唯一的。
结果表有列(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,因为只有这个科目有唯一的student primary_skill,在其他id中primary skill是重复的。
我做错了什么?如何改善?

enxuqcxy

enxuqcxy1#

请尝试以下操作:

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

new9mtju2#

如果我没理解错的话,你想要的是只有一种技能的学生的结果。您可以使用GROUP BYHAVING子句检查技能计数是否等于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;

相关问题