2015-05-28 3 views
0

Я пытаюсь обновить несколько строк в таблице, однако я не могу заставить его работать там, где он обновляет сразу все строки. Я очень потерял то, как я могу это достичь.SQL - обновить несколько строк в таблице

UPDATE ENROLMENT 
INNER JOIN STUDENT ON ENROLMENT.REGNUM = STUDENT.REGNUM 
INNER JOIN TOPIC ON ENROLMENT.TOPIC_NUMBER = TOPIC.TOPIC_NUMBER 
SET GRADE='87' WHERE FAMILY_NAME='SMITH' and TOPIC_NAME='Internet Computing' 
SET GRADE='84' WHERE FAMILY_NAME='SMITH' and TOPIC_NAME='Programming Language Concepts' 
SET GRADE='60' WHERE FAMILY_NAME='BLOGGS' and TOPIC_NAME='Computer Networks' 
SET GRADE='55' WHERE FAMILY_NAME='BLOGGS' and TOPIC_NAME='Internet Computing' 
SET GRADE='72' WHERE FAMILY_NAME='BLOGGS' and TOPIC_NAME='Programming Language Concepts' 
SET GRADE='63' WHERE FAMILY_NAME='BLACK' and TOPIC_NAME='Internet Computing'; 

ответ

2

Вы можете использовать случай, когда в наборе обновления части как показано ниже, обратите внимание, что вы можете предоставить else состояние в конце, так что, когда условие не соответствует вы можете обновить с некоторым значением. Также лучше указать aliasname.columnname в наборе и в случае имен столбцов для лучшей читаемости и, что более важно, чтобы избежать двусмысленности.

UPDATE ENROLMENT 
INNER JOIN STUDENT ON ENROLMENT.REGNUM = STUDENT.REGNUM 
INNER JOIN TOPIC ON ENROLMENT.TOPIC_NUMBER = TOPIC.TOPIC_NUMBER 
set GRADE = 
case 
when FAMILY_NAME='SMITH' and TOPIC_NAME='Internet Computing' then 87 
when FAMILY_NAME='SMITH' and TOPIC_NAME='Programming Language Concepts' then 84 
when FAMILY_NAME='BLOGGS' and TOPIC_NAME='Computer Networks' then 60 
when FAMILY_NAME='BLOGGS' and TOPIC_NAME='Internet Computing' then 55 
when FAMILY_NAME='BLOGGS' and TOPIC_NAME='Programming Language Concepts' then 72 
when FAMILY_NAME='BLACK' and TOPIC_NAME='Internet Computing' then 63 
end; 

Здесь используется псевдоним

UPDATE ENROLMENT e 
INNER JOIN STUDENT s ON e.REGNUM = s.REGNUM 
INNER JOIN TOPIC t ON e.TOPIC_NUMBER = t.TOPIC_NUMBER 
set e.GRADE = 
case 
when s.FAMILY_NAME='SMITH' and t.TOPIC_NAME='Internet Computing' then 87 
when s.FAMILY_NAME='SMITH' and t.TOPIC_NAME='Programming Language Concepts' then 84 
when s.FAMILY_NAME='BLOGGS' and t.TOPIC_NAME='Computer Networks' then 60 
when s.FAMILY_NAME='BLOGGS' and t.TOPIC_NAME='Internet Computing' then 55 
when s.FAMILY_NAME='BLOGGS' and t.TOPIC_NAME='Programming Language Concepts' then 72 
when s.FAMILY_NAME='BLACK' and t.TOPIC_NAME='Internet Computing' then 63 
end; 
+0

хороший ответ .... это, безусловно, работать –