我有两个表,Students
和Course_Registrations
,每个学生都会注册几个课程。
在我的students
表格中,我有他/她的学位(MS / BS),但在course_Registrations
表中缺少。我已尝试使用以下代码获取course_registrations
中的每个学生学位课程,但我收到此错误:
标量子查询只允许返回单行
有什么建议吗?
Update ROOT.ISB_COURSE_REGISTRATIONS
set ROOT.ISB_COURSE_REGISTRATIONS.degree=
(
Select ROOT.ISB_STUDENTS.degree
from ROOT.ISB_STUDENTS
where ROOT.ISB_STUDENTS.STUDENT_ID=ROOT.ISB_COURSE_REGISTRATIONS.STUDENT_ID
)
where exists
(
select *
from ROOT.ISB_STUDENTS
where ROOT.ISB_STUDENTS.STUDENT_ID=ROOT.ISB_COURSE_REGISTRATIONS.STUDENT_ID
GROUP BY STUDENT_ID
);
答案 0 :(得分:2)
您遇到问题,因为有些学生在ISB_STUDENTS
中有多行。您需要弄清楚如何将它们组合起来。与此同时,我建议:
Update ROOT.ISB_COURSE_REGISTRATIONS
set degree = (Select MAX(s.degree)
from ROOT.ISB_STUDENTS s
where ISB_STUDENTS.STUDENT_ID = s.STUDENT_ID
)
where exists (select 1
from ROOT.ISB_STUDENTS s
where s.STUDENT_ID = ISB_COURSE_REGISTRATIONS.STUDENT_ID
group by s.STUDENT_ID
having min(s.degree) = max(s.degree)
);
请注意having
子句中子查询中where
子句的使用。仅当学生记录中的所有学位相同时,才会设置该值。然后你可以调查两个问题:
ISB_STUDENTS
的表格中,为什么会出现重复STUDENT_ID
s?答案 1 :(得分:0)
你可以试试这个:
Update ROOT.ISB_COURSE_REGISTRATIONS
set ROOT.ISB_COURSE_REGISTRATIONS.degree=
(
Select MAX(ROOT.ISB_STUDENTS.degree)
from ROOT.ISB_STUDENTS
where ROOT.ISB_STUDENTS.STUDENT_ID=ROOT.ISB_COURSE_REGISTRATIONS.STUDENT_ID
)
where exists
(
select 1
from ROOT.ISB_STUDENTS
where ROOT.ISB_STUDENTS.STUDENT_ID=ROOT.ISB_COURSE_REGISTRATIONS.STUDENT_ID
);
为ISB_COURSE_REGISTRATIONS
Select ROOT.ISB_STUDENTS.degree
from ROOT.ISB_STUDENTS
where ROOT.ISB_STUDENTS.STUDENT_ID=ROOT.ISB_COURSE_REGISTRATIONS.STUDENT_ID
因此,如果它为某个ISB_COURSE_REGISTRATIONS.degree
返回多行,则不清楚将哪一行设置为值。
将MAX(ROOT.ISB_STUDENTS.degree)
应用于此子查询的所有行可确保只有一行。
但是你应该小心这个更新。也许有一个学生参加不同的课程,每个课程都有不同程度的mybe。
答案 2 :(得分:0)
我从你的问题中了解到,你有以下
如果是这样,你可以尝试这个
Update r set r.degree=s.degree
from ROOT.ISB_COURSE_REGISTRATIONS r
inner join ROOT.ISB_STUDENTS s on r.STUDENT_ID=s.STUDENT_ID
如果我误解了您的任何要求,请澄清
希望这会对你有所帮助