2014-11-23 118 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 

如果我誤解你的任何要求,請說明它

希望這將幫助你

相關問題