2011-06-20 122 views
1

雖然有很多類似這樣的問題,如 「Updating a record from another table」,但我無法得到這個工作。如何更新從另一個表格中選擇字段的表格?

我有一個查詢選擇和更新表sem_stdexamfinresmark。 select子查詢返回多行數據,其大小可能不等於正在更新的表,但更新正在工作。

查詢看起來像:

update sem_stdexamfinresmark sr, 
    (select 
     se.currsession, 
     str.studentid, 
     str.classid, 
     str.subjectid, 
     str.aggScore*(select gbtp.percentage from gb_termpercentage gbtp where gbtp.termname = se.examtype)/100 as aggPer, 
     str.aggGrade 
    from 
     sem_stdexamtermresr str, 
     sem_exam se 
    where 
     str.examid=se.examid and 
     se.examtype = 'Second Term' and 
     se.currsession =1 and classid='8' 
    ) s 
    set 
     sr.SecondTermMark = s.aggPer and 
     sr.SecondTermGrade = s.aggGrade 
    where 
     sr.studentid=s.studentid and 
     sr.subjectid=s.subjectid and 
     s.currsession = s.currsession and 
     sr.classid='8'; 

編輯:

update sem_stdexamfinresmark 
set 
    sr.SecondTermMark = s.aggPer and 
    sr.SecondTermGrade = s.aggGrade 
from 
(select 
    se.currsession, 
    str.studentid, 
    str.classid, 
    str.subjectid, 
    str.aggScore*(select gbtp.percentage from gb_termpercentage gbtp where gbtp.termname = se.examtype)/100 as aggPer, 
    str.aggGrade 
from 
    sem_stdexamtermresr str, 
    sem_exam se 
where 
    str.examid=se.examid and 
    se.examtype = 'Second Term' and 
    se.currsession = 1 and classid='8' 
) s 
where 
    sr.studentid=s.studentid and 
    sr.subjectid=s.subjectid and 
    s.currsession =1 and 
    sr.classid='8'; 
    select * from sem_exam; 
    update sem_exam set currsession =1; 
+0

你的問題是什麼?你需要什麼樣的描述? – Abhay

+0

@Abhay我有一個查詢插入myql數據庫。現在我需要通過選擇另一個表來更新先前插入的記錄,但查詢無法正常工作。我想知道這是如何工作的。 – kinkajou

+0

我沒有看到你的查詢有什麼問題嗎?假設沒有語法錯誤,當你說查詢不能正常工作時,意味着它沒有進行任何更新,對吧?你已經提到子查詢返回結果,所以我想到的可能性是UPDATE中的WHERE子句不返回任何匹配的行。你能確認WHERE是否找到匹配的行嗎? – Abhay

回答

0

這是當一個人失去的睡眠,會發生什麼:(我在這裏做了一個愚蠢的錯誤添加「和」

0

嘗試的東西,看起來更像是:

update foo 
set col = bar.col 
from bar 
where ... 
+0

你對我的查詢有什麼看法任何建議 – kinkajou

+0

我認爲你應該重寫你的查詢,就像我上面建議的那樣。當寫一個更新查詢時,開始寫它作爲一個普通的'select *從foo,bar那裏...'。然後去掉字段列表和'foo''部分,並用'update foo set ...'代替它們。 –

+0

我寫過像你說的那樣在我編輯但不會'噸工作:( – kinkajou

相關問題