У меня есть следующая таблица называется «РЕЗУЛЬТАТ», что я получаю значение из другой таблицы под названием «Temp_main»Использование условного Update - На дубликате ключа обновления
пол в «Result», как следующее:
StudentName | SujectName | Result
---------------------------------
Adam | Math | Fail
Bob | History | Pass
Catherine | Math | Pass
Dave | Science | Fail
Evan | History | Pass
Первичный ключ здесь (StudentName,SubjectName)
Я использую следующий код, чтобы получить данные в таблицу:
insert into result(studentName,subjectName,result)
select StudentName,SubjectName,result
from temp_main
Таблица temp_main не имеет того же первичного ключа, поэтому при вставке данных в таблицу результатов есть повторяющиеся значения ключей.
Предположим, что студент появляется для теста по одному и тому же вопросу более одного раза. Все его попытки находятся в таблице temp_main, в то время как его лучший результат - в таблице результатов.
Я пытаюсь получить ON DUPLICATE KEY UPDATE
код, который обновляет результат студента-субъектных пары тогда и только тогда, когда последний результат «Pass»
Я попытался
insert into result(studentName,subjectName,result)
select StudentName,SubjectName,result
from temp_main
on duplicate key update result = case when temp_main(result) = 'Pass'
Then result(result)='Pass'
Я уверен, это дрянной код. Но я не мог найти лучшего решения.
'последний результат? Есть ли столбец 'resultDate' столбца temp_main, о котором вы нам не говорите? –
Нет. Я имел в виду результат в столбце temp_main. Извините за путаницу. –
@KumaranSenapathy - То, что Том имеет в виду, заключается в том, что SQL действительно не поддерживает вещи в «порядке». ** ТОЛЬКО ** для обеспечения конкретной «последней» (или любой другой) строки использовать предложение «ORDER BY» с соответствующим столбцом. Если у вас нет такого столбца, вы в основном тосты, потому что все строки одинаково упорядочены. –