如果满足条件,用单个查询更新多个表?

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

效果不错..