如果满足条件,用单个查询更新多个表?
Update multiple tables with single query, if a condition is met?
在某些情况下,如何在单个 UPDATE SET 中更新 2 tables?
如果条件不满足,我就只更新一个table..
我想做这样的事情:
UPDATE tab1, tab2 SET
tab1.value2=7,
CASE tab1.value1 IS NOT NULL
WHEN true
THEN tab2.value1 = tab1.value1
END
WHERE tab1.id=1 AND tab2.id = tab1.tab2_fk_id
MySQL workbench 抱怨:语法错误:意外 CASE_SYM
我想我应该使用 TRIGGER - 函数来做到这一点
在这里你可以怎么做,
update tab1 ,tab2
join tab2 on tab2.id = tab1.tab2_fk_id
set
tab1.value2=7,
tab2.value1 = case when tab1.value1 IS NOT NULL then tab1.value1 else tab2.value1 end
where tab1.id=1
非常感谢 Abhik Chakraborty 提供了出色的解决方案。它肯定会在其他情况下有用。我已经决定在 static_conveyor(上例中的 ~ tab1)中创建一个触发器来实现相同的行为。我在这里使用真实的表和列名而不是通用的.. :
USE `tca`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER `static_conveyor_AUPD` AFTER UPDATE ON `static_conveyor` FOR EACH ROW
BEGIN
IF (OLD.signal != NEW.signal)
THEN
IF ((NEW.pallet_id IS NOT NULL) AND (NEW.default_empty IS NOT NULL))
THEN
UPDATE pallet SET empty = NEW.default_empty WHERE pallet.id = NEW.pallet_id;
END IF;
END IF;
END
效果不错..
在某些情况下,如何在单个 UPDATE SET 中更新 2 tables? 如果条件不满足,我就只更新一个table..
我想做这样的事情:
UPDATE tab1, tab2 SET
tab1.value2=7,
CASE tab1.value1 IS NOT NULL
WHEN true
THEN tab2.value1 = tab1.value1
END
WHERE tab1.id=1 AND tab2.id = tab1.tab2_fk_id
MySQL workbench 抱怨:语法错误:意外 CASE_SYM
我想我应该使用 TRIGGER - 函数来做到这一点
在这里你可以怎么做,
update tab1 ,tab2
join tab2 on tab2.id = tab1.tab2_fk_id
set
tab1.value2=7,
tab2.value1 = case when tab1.value1 IS NOT NULL then tab1.value1 else tab2.value1 end
where tab1.id=1
非常感谢 Abhik Chakraborty 提供了出色的解决方案。它肯定会在其他情况下有用。我已经决定在 static_conveyor(上例中的 ~ tab1)中创建一个触发器来实现相同的行为。我在这里使用真实的表和列名而不是通用的.. :
USE `tca`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` TRIGGER `static_conveyor_AUPD` AFTER UPDATE ON `static_conveyor` FOR EACH ROW
BEGIN
IF (OLD.signal != NEW.signal)
THEN
IF ((NEW.pallet_id IS NOT NULL) AND (NEW.default_empty IS NOT NULL))
THEN
UPDATE pallet SET empty = NEW.default_empty WHERE pallet.id = NEW.pallet_id;
END IF;
END IF;
END
效果不错..