带连接的 Mysql 触发器

标签 mysql sql database triggers

我有三个相互关联的 MYSQL 表,如下所示。

我目前正在将 dateofjob 存储两次,因为我不知道如何在触发器中创建表连接。目前我在标本详细信息表上使用此触发器

CREATE TRIGGER `NewAge_update` BEFORE UPDATE ON `Speciemn_Details`
 FOR EACH ROW BEGIN
    SET NEW.Due_Date = DATE_ADD(NEW.CastDate,INTERVAL NEW.Age DAY);
END

这工作得很好,但我希望能够从标本详细信息表中删除列 dateofjob 并从 Job_Details 表中计算 duedate 以节省我自己避免双重数据。

我必须将 job_details.IDTest_Details.PARENTIDTest_Details.TESTIDspecimen_details 结合起来。 TESTID,我只是不知道如何在触发器内执行此操作。任何帮助将不胜感激

我已尝试尽可能详细,但如果需要更多信息,请问我

工作详情

 +----+-----------+
 | ID | dateofjob |
 +----+-----------+
 |  1 | 1/01/2015 |
 |  2 | 1/01/2016 |
 |  3 | 1/01/2017 |
 +----+-----------+

测试详情

+----------+--------+--------------+
| ParentID | TestID | TestLocation |
+----------+--------+--------------+
|        2 |   2154 | Barn         |
|        2 |   2155 | Barn         |
|        1 |   8055 | Yard         |
+----------+--------+--------------+

标本_详细信息

+--------+----------+---------+-----------+-----------+
| TestID | Specimen | TestAge | dateofjob |  Duedate  |
+--------+----------+---------+-----------+-----------+
|   2154 | A        |       3 | 1/01/2016 | 4/01/2016 |
|   2154 | B        |       8 | 1/01/2016 | 9/01/2016 |
|   8055 | A        |       2 | 1/01/2015 | 3/01/2015 |
+--------+----------+---------+-----------+-----------+

最佳答案

触发器代码中的联接实际上与任何其他过程代码中的联接没有任何不同,只是您不能查询触发表,而是拥有 OLDNEW 伪记录。如果我理解了你的描述,你想做类似的事情

CREATE TRIGGER `NewAge_update` BEFORE UPDATE ON `Specimen_Details`
  FOR EACH ROW
  BEGIN
    DECLARE jobdate DATE;
    SELECT dateofjob
      INTO jobdate
      FROM job_details j, test_details t
      WHERE j.ID = t.ParentID
        AND t.TestID = NEW.TestID;
    SET NEW.Duedate = DATE_ADD(jobdate, INTERVAL NEW.TestAge DAY);
  END;

(不要忘记触发器主体是过程性的,因此您不必在一条语句中完成所有操作。)

关于带连接的 Mysql 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35097743/

相关文章:

MySQL 在与 MIN 连接时添加列

sql - MySQL:每日平均值

SQL Server : Retrieve the duplicate value in a column

mysql - 如果需要使用 15h2 或 15'2 或 15,2 之类的数据类型,MySQL 的数据类型是什么?

PHP/MySQL - 外键问题

mysql - 当 SQL 中列中的值不明确时,如何使用 where 子句?

php - 使用php删除表的特定行

mysql - 邻接模型 MySQL 语法

java - 数据库中的旧数据不断被新数据替换

sql - 我将如何构建用于接收销售订单的数据库?