【问题标题】: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)