【问题标题】:Update different columns using inner join使用内连接更新不同的列
【发布时间】:2020-07-13 07:21:02
【问题描述】:

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

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】:

    是的,这是可能的,但有点麻烦。基本上就是两个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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 2019-06-25
      • 2014-01-14
      • 1970-01-01
      • 1970-01-01
      • 2014-12-24
      相关资源
      最近更新 更多