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

时间:2015-05-18 09:45:30

标签: mysql sql-update case

在某些情况下,如何在单个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 - 函数

来做这件事

2 个答案:

答案 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

很好..