2014-11-23 44 views
3

我有两个表格,StudentsCourse_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

您使用的数据库是?如果有不止一场比赛,你想要什么学位? – 2014-11-23 20:59:43

回答

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

注意where子句中子查询使用having条款。只有当学生记录中的所有度数都相同时,才会设置该值。然后,你可以研究两个问题:

  • 在一个表中调用ISB_STUDENTS为什么会有重复的STUDENT_ID S'
  • 如果有这样的重复,你将如何处理多个不一致的程度?
+0

嘿谢谢!你是对的! StudentID 1属于学士学位,也是MS学生。我没有记住这一点!在学生表中,我还有一个以前的学位专栏,如果以前的学位是高中,如果以前的学位是学士学位和学士学位,你可以帮助我一个指示MS的指令吗? 非常感谢!我在仓储项目上工作,所以重复的学生ID是因为我必须从多个来源捕获数据到我的临时区域。 :) – 2014-11-23 22:38:05

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)应用于此子查询的所有行可确保只有一行。

但是你应该小心这个更新。也许有不同的课程有学生参加,每个课程有不同的学位。

0

,因为我从你的问题的理解,你有以下

    包含度视场
  1. 学生表
  2. course_registration表还包含和你想从学生表更新为每个学生
  3. 度视场

如果是的话,你可以试试这个

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 

如果我误解你的任何要求,请说明它

希望这将帮助你

相关问题