Вместо обновления имен в полях кода вы можете создать представление.
В приведенном ниже примере используются LEFT JOIN в таблицах причин, а затем COALESCE - имена причин.
CREATE VIEW vwEvent AS
SELECT
ev.*,
COALESCE(st.Name, ev.`Status Code`) AS `Status Name`,
COALESCE(ready.Name, delay.Name, spare.Name, down.Name, ev.`Reason Code`) AS `Reason Name`
FROM `event` ev
LEFT JOIN `status` AS st ON st.`Status Code` = ev.`Status Code`
LEFT JOIN ready_reason AS ready ON (ev.`Status Code` = 'R' AND ready.`Status Code` = ev.`Reason Code`)
LEFT JOIN delay_reason AS delay ON (ev.`Status Code` = 'D1' AND delay.`Status Code` = ev.`Reason Code`)
LEFT JOIN spare_reason AS spare ON (ev.`Status Code` = 'S' AND spare.`Status Code` = ev.`Reason Code`)
LEFT JOIN down_reason AS down ON (ev.`Status Code` = 'D2' AND down.`Status Code` = ev.`Reason Code`);
Затем выберите в представлении, чтобы получить имена состояний и причин:
select EventId, Duration, `Status Name`, `Reason Name`
from vwEvent
Тест по db <> fiddle здесь
Ну, я полагаю, вы можете использовать представление для обновления самой таблицы.
Но это может быть не самой лучшей идеей.
update `event` ev
join `vwEvent` vw on vw.EventId = ev.EventId
set ev.`Status Code` = vw.`Status Name`,
ev.`Reason Code` = vw.`Reason Name`