MySQL触发器将日期插入具有唯一匹配ID的行

Posted

技术标签:

【中文标题】MySQL触发器将日期插入具有唯一匹配ID的行【英文标题】:MySQL trigger to insert date to row with unique matching ID 【发布时间】:2016-02-09 01:03:12 【问题描述】:

我需要编写一个 SQL 触发器,以便在插入后将日期插入到另一个表的一行中。

数据是这样进来的:

一个包含 JobID 的表单被提交到 _OnsiteTable,这个 JobID 匹配包含 _JobTable 中 JobID 值的当前条目。将数据插入 _OnsiteTable 后,我需要一个触发器,将当前日期插入 JobTable 中名为 JobClos​​edDate 的列中。

需要将日期插入到与_OnsiteTable表格中输入的JobID值相匹配的行中。

到目前为止我有这个,但我不知道如何比较表之间的 JobID 值并插入到特定行中。

CREATE TRIGGER UpdateClosedDate
AFTER INSERT on _OnsiteTable

BEGIN

Declare ClosedDate DATETIME;
SET ClosedDate = CURDATE();

CASE WHEN (ClosedDate) = ?
    THEN INSERT INTO `_JobTable`( `JobClosedDate`)
    VALUES
    ( ClosedDate);  

END CASE;

END

非常感谢任何帮助!

现在可以完成查询,谢谢!如下:

CREATE TRIGGER UpdateClosedDate
AFTER INSERT on _OnsiteTable

BEGIN

Declare ClosedDate DATETIME;
SET ClosedDate = CURDATE();

UPDATE `_JobTable` SET `JobClosedDate` = ClosedDate WHERE `JobID` = new.JobID;

END

【问题讨论】:

只需将hole case语句更改为:update _JobTable set JobClosedDate = ClosedDate where JobID = NEW.JobID; 谢谢! @JorgeCampos 实际上我遇到了语法错误,我是否需要修改该行某处的语法才能使其正确? 可能是我没有用括号。 啊,明白了。需要将我的表格和列放入 `` - 现在只是测试谢谢@JorgeCampos 让我知道它是否有效,然后我会添加它作为答案:) 【参考方案1】:

由于问题已通过给定的评论解决,我将在此处添加以供其他有类似问题的人参考:

由于您想更新一列(“将一个值插入一列...”)您只需要修复您的触发器,更改您当前的caseupdate 命令的声明如下:

UPDATE `_JobTable` 
   SET `JobClosedDate` = ClosedDate 
 WHERE `JobID` = NEW.JobID;

【讨论】:

以上是关于MySQL触发器将日期插入具有唯一匹配ID的行的主要内容,如果未能解决你的问题,请参考以下文章

如果一行匹配条件,则 sed 替换与模式范围匹配的行

SQL BigQuery - 插入具有不同日期范围的行

将 id 插入具有相同信息的行的 PL/SQL 过程

使用触发器如何复制刚刚插入的行

通过 id mysql 查找具有最新日期的行

MySQL 触发器更新最后插入的行