我有以下两个表:
表格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
和值,对于给定的和(这些字段在表 1 和表 2 上具有相同的值,并且表 1 已在表 2 之前填写)sex
patient_id
patient_wpid
使用表 2 中的 和 的插入值
weight
并creatinine
计算公式,以便为eGFR
表 2 的列生成并连续存储一个值。公式如下:eGFR = 175 × (肌酐)^(-1.154) × (年龄)^(-0.203) × (0.742,如果女性)
所以,我写的(并且产生了很多错误,因为这是我第一次尝试使用触发器)如下:
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 ;
你能帮我纠正这个吗?谢谢!
我改变了一点
您想要的必须是 BEFORE INSERT TRIGGER
我在你的扳机里找不到的重量
因为每个变量都必须来自某个你可以定义它们的地方,从新行中获取它们,或者通过一个 selectl。
您无法通过编写 tabl1.abc 或 table2.xyz 来访问它们