【问题标题】:Mysql trigger with joins带有连接的 Mysql 触发器
【发布时间】:2016-01-30 03:45:51
【问题描述】:

如下所示,我有三个相互关联的 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 |
+--------+----------+---------+-----------+-----------+

【问题讨论】:

    标签: mysql sql database triggers


    【解决方案1】:

    触发器代码中的联接实际上与任何其他过程代码中的联接没有任何不同,只是您无法查询触发表,而是拥有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;
    

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

    【讨论】:

    • 非常感谢,这几天我一直在摸不着头脑。完美运行!
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2013-04-09
    • 2011-02-16
    • 2021-09-29
    • 2018-10-31
    • 1970-01-01
    • 2014-03-07
    相关资源
    最近更新 更多