在某些情况下,如何在单个UPDATE SET中更新2个表? 如果不满足条件,我只会更新一个表..
我想做这样的事情:
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 - 函数
来做这件事答案 0 :(得分:1)
在这里你可以做到这一点,
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
答案 1 :(得分:0)
非常感谢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
很好..