Правильно построить триггер mysql
У меня есть следующие две таблицы:
Таблица 1:
+-----------------------------+--------------------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------------+--------------------------------------+------+-----+---------+-------+ | patient_id | bigint(20) | NO | PRI | NULL | | | patient_wpid | int(11) | NO | PRI | NULL | | | age_at_visit | int(11) | YES | | NULL | | | sex | enum('male','female') | YES | | NULL |
Таблица 2
+-------------------------+----------------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+----------------------------+------+-----+---------+----------------+ | patient_id | bigint(20) | NO | PRI | NULL | | | patient_wpid | int(11) | NO | PRI | NULL | | | weight | text | YES | | NULL | | | creatinine | text | YES | | NULL | | | eGFR | varchar(100) | YES | | N/A | | +-------------------------+----------------------------+------+-----+---------+----------------+
Что мне нужно сделать, так это после вставки в таблицу 2 выполнить следующее:
1. Выберите пункт
age_at_visitи
sexзначения из таблицы 1, для данного
patient_idи
patient_wpid(эти поля имеют одинаковые значения как в таблице 1, так и в таблице 2, и таблица 1 была заполнена до таблицы 2)
2. Используйте вставленные значения
weightи
creatinineв таблице 2 и вычислить формулу, чтобы произвести и последовательно сохранить значение для
eGFRстолбец из таблицы table2.
Формула выглядит следующим образом:
eGFR = 175 × (creatinine)^(-1.154) × (age)^(-0.203) × (0.742 if female)
Не могли бы вы помочь мне исправить это?
Спасибо!
Что я уже пробовал:
Итак, то, что я написал (и произвел довольно много ошибок, так как это моя самая первая попытка с триггерами), заключается в следующем:
delimiter // CREATE TRIGGER calcEGFR AFTER INSERT ON Table2 FOR EACH ROW BEGIN SELECT age_at_visit, sex FROM Table1 WHERE (Table1.patient_wpid = Table2.patient_wpid AND Table1.patient_id = Table2.patient_id) SET @creatinine_power := SELECT POWER(creatinine,-1.154); SET @age_power := SELECT POWER(Table1.age_at_visit,-0.203); IF Table1.sex = 'female' THEN SET @sex_addition := 0.742 END IF; IF Table1.sex = 'male' THEN SET @sex_addition := 1 END IF; SET @eGFR_value := (175 * @creatinine_power * @age_power * @sex_addition) UPDATE Table2 SET eGFR = @eGFR_value; END;// delimiter ;
k5054
Хотя MySQL, кажется, позволяет математику на нечисловых столбцах, используя text
или varchar()
для столбцов, которые должны иметь только числовые значения, это может привести к проблемам в будущем.
Пожалуйста, дайте нам некоторое представление о том, какие ошибки вы получаете с вашим кодом. Мы не читаем мысли, и большинство из нас, вероятно, не будет пытаться воссоздать вашу схему, чтобы помочь вам.