您好,我有两个表格“实验”和“结果”。 我想创建一个触发器,以便每当我在Result表中插入一行时,都应拉出“ Experiment”表中存在的最新“ Experiment_Name”,并将其拉入名为“ Experiment_Name”的“ Result”表的列中。>
EXPERIMENT TABLE
Experiment_id(auto_incremented) Exp_name
1 abc
RESULT TABLE
Result_id Exp_Name Exp_id
1 abc 1
2 abc 1
3 abc 1
**New Entry Exp name - xyz**
EXPERIMENT TABLE
Experiment_id(auto_incremented) Exp_name
1 abc
2 xyz
RESULT TABLE
Result_id Experiment_id Experiment_name
1 1 abc
2 1 abc
3 1 abc
4 2 xyz
5 2 xyz
6 2 xyz
我知道如何提取最近的Experiment_id,但无法提取最近的“ Exp_Name”
查询最近有效的Experiment_id。
CREATE DEFINER=`new`@`%` TRIGGER `worksheet`.`TestResult_BEFORE_INSERT` BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_id = (select max(Experiment_id) from TestExperiment)
我尝试提交最近的Experiment_Name
CREATE DEFINER=`new`@`%` TRIGGER `worksheet`.`TestResult_BEFORE_INSERT_1` BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_Name = (select Experiment_Name from TestExperiment where Experiment_id = max(Experiment_id))
不起作用,引发语法错误。
我正在使用mysql 5.6。请有人帮助我,谢谢!
答案 0 :(得分:1)
使用ORDER BY ... LIMIT 1
查询:
CREATE TRIGGER `TestResult_BEFORE_INSERT_1`
BEFORE INSERT ON `TestResult` FOR EACH ROW
set new.Experiment_Name = (
select Experiment_Name
from TestExperiment
order by Experiment_id desc
limit 1
);
如果要复制两个值(Experiment_id
和Experiment_Name
),则可以使用SELECT ... INTO ...
语法将这些值存储到局部变量中,然后将它们复制到所需的列中:
DELIMITER //
CREATE TRIGGER `TestResult_BEFORE_INSERT`
BEFORE INSERT ON `TestResult` FOR EACH ROW
BEGIN
DECLARE v_id INT;
DECLARE v_name TEXT;
SELECT Experiment_id, Experiment_Name INTO v_id, v_name
FROM TestExperiment
ORDER BY Experiment_id DESC
LIMIT 1;
SET new.Experiment_id = v_id;
SET new.Experiment_Name = v_name;
END //
DELIMITER ;
在db-fiddle上观看演示