【问题标题】:Update another table if conditions are met如果满足条件,则更新另一个表
【发布时间】:2017-04-04 11:59:58
【问题描述】:

因为我正在开发一个用于管理元数据的小型应用程序,我想知道如果满足条件,是否可以在另一个表中插入行。

让我举个例子:所以,假设我们有表ispu_plan

CREATE TABLE `ispu_plan` (
  `id` int(11) NOT NULL,
  `id_jls` int(11) NOT NULL,
  `id_razina_plan` int(11) NOT NULL,
  `id_revizija` int(11) NOT NULL,
  `naziv_plan` varchar(150) NOT NULL,
  `ispu_naziv` varchar(100) NOT NULL,
  `id_mjerilo` int(11) NOT NULL,
  `datum_donosenja_plana` date DEFAULT NULL,
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

当我正在更新表 ispu_plan 时,如果 ispu_plan 中的某些条件与表 ispu_plan 中的相同行满足,我想更新另一个表(例如 ispu_plan_updated

使用这个查询:

SELECT * FROM ispu_plan WHERE  datum_donosenja_plana BETWEEN '2014-01-01' AND CURDATE()

我想在表 ispu_plan_updated 中插入行。这样的事情可能吗?我可以使用视图在ispu_plan_updated 中插入行吗?

谢谢

【问题讨论】:

  • 结帐insert into select from...
  • 所以回顾一下@svinjica,一些脚本会更新ispu_plan 中的一行,同时如果满足某些条件,还会更新ispu_plan_updated 中的一行?
  • @DanIonescu 是的,没错!

标签: mysql


【解决方案1】:

您可以使用触发器来实现:

DROP TRIGGER IF EXISTS ispu_plan_trigger;

DELIMITER |

CREATE TRIGGER ispu_plan_trigger AFTER UPDATE ON ispu_plan
FOR EACH ROW BEGIN
-- example condition with update:
IF NEW.datum_donosenja_plana >= '2017-01-01' THEN
UPDATE ispu_plan_updated SET naziv_plan = 'some_value' WHERE id = NEW.id
LIMIT 1;
END IF;
END;

DELIMITER ;

【讨论】:

  • 感谢 dan 的快速响应。我会尽快测试这个
  • 没问题,换成自己的条件和自定义更新即可
  • 。我确实尝试过,但是即使满足条件,当我在 ispu_plan 中插入行时也没有发生任何事情。公平地说,我离你的触发器更近了一步。如果我解释得足够好,我不会,但我想用满足给定条件的相同值更新新表
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-24
  • 1970-01-01
相关资源
最近更新 更多