Как обновить таблицу с полями, выбранными из другой таблицы?

Хотя есть много подобных вопросов, таких как "Обновление записи из другой таблицы", но я не мог заставить это работать.

У меня есть запрос, который выбирает и обновляет таблицу 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;

person kinkajou    schedule 20.06.2011    source источник
comment
Какой у Вас вопрос? Какое описание вам нужно?   -  person Abhay    schedule 20.06.2011
comment
@Abhay У меня есть запрос, который вставляется в базу данных myql. Теперь мне нужно обновить записи, которые я вставил ранее, выбрав другую таблицу, но запрос не работает должным образом. Я хотел знать, как это работает.   -  person kinkajou    schedule 20.06.2011
comment
Я не вижу ничего плохого в вашем запросе? И при условии отсутствия синтаксических ошибок, когда вы говорите, что запрос работает неправильно, вы имеете в виду, что он не выполняет никаких обновлений, верно? Вы упомянули, что подзапрос возвращает результаты, поэтому мне приходит в голову возможность, что либо предложения WHERE в UPDATE не возвращают совпадающих строк. Не могли бы вы подтвердить, находит ли WHERE совпадающие строки?   -  person Abhay    schedule 20.06.2011
comment
Да, он обновляет некоторые записи, но не все. Хотя я обновляю два столбца, он обновляет только один, а следующий - нулевой. Первый тоже нехороший, это бардак. Предложение where имеет все параметры, соответствующие определенному идентификатору строки, т.е. студент. Я смотрю на один и тот же запрос в течение 2 дней. Я застрял.   -  person kinkajou    schedule 20.06.2011
comment
Вот что происходит, когда кто-то совершает глупую ошибку и ходит по кругу :( Спасибо Абхаю и Денису за помощь, которую я действительно получил, и за вставку запятой в операторе set.   -  person kinkajou    schedule 20.06.2011


Ответы (2)


попробуйте что-нибудь похожее на:

update foo
set col = bar.col
from bar
where ...
person Denis de Bernardy    schedule 20.06.2011
comment
что вы думаете о моем запросе любые предложения - person kinkajou; 20.06.2011
comment
Я думаю, вы должны переписать свой запрос, как я предложил выше. При написании запроса на обновление начните с написания его как обычного select * from foo, bar where .... Затем удалите список полей и часть foo, и замените их на update foo set .... - person Denis de Bernardy; 20.06.2011

Вот что происходит, когда человек теряет сон :( Я просто сделал глупую ошибку и добавил "и"

person kinkajou    schedule 23.06.2011