使用内部联接更新不同的列

问题描述 投票:1回答:1

是否有可能将这两个代码放在一行代码中?需要更改什么?

UPDATE table1 AS t1 INNER JOIN table2 AS t2 ON t1.id = t2.id SET t1.column2 = 1;
UPDATE table1 AS t1 INNER JOIN table3 AS t3 ON t1.id = t3.id SET t1.column3 = 1;

谢谢。

mysql sql join sql-update inner-join
1个回答
2
投票

是可以的,但是有点麻烦。基本上是两个LEFT JOINS和一些条件逻辑:

UPDATE table1 t1
LEFT JOIN table2 t2 ON t2.id = t1.id
LEFT JOIN table3 t2 ON t3.id = t1.id
SET 
    t1.column2 = CASE WHEN t2.id IS NOT NULL THEN 1 ELSE t1.column2 END,
    t1.column3 = CASE WHEN t3.id IS NOT NULL THEN 1 ELSE t1.column3 END
WHERE t2.id IS NOT NULL OR t3.id IS NOT NULL

您还可以使用EXISTS和相关子查询:

UPDATE table1 t1
SET 
    t1.column2 = CASE
        WHEN EXISTS(SELECT 1 FROM table2 t2 WHERE t2.id = t1.id)
        THEN 1
        ELSE t1.column2
    END,
    t1.column3 = CASE
        WHEN EXISTS(SELECT 1 FROM table3 t3 WHERE t3.id = t1.id)
        THEN 1
        ELSE t1.column3
    END
WHERE 
    EXISTS(SELECT 1 FROM table2 t2 WHERE t2.id = t1.id)
    OR EXISTS(SELECT 1 FROM table3 t3 WHERE t3.id = t1.id)

0
投票
UPDATE table1 AS t1 
LEFT JOIN table2 AS t2 ON t1.id = t2.id 
LEFT JOIN table3 AS t3 ON t1.id = t3.id 
SET t1.column2 = CASE WHEN t2.id IS NULL
                      THEN t1.column2
                      ELSE 1
                      END,
    t1.column3 = CASE WHEN t3.id IS NULL
                      THEN t1.column3
                      ELSE 1
                      END;
© www.soinside.com 2019 - 2024. All rights reserved.