开发中难免会遇到批量更新表中字段的情况,比如tb_a, tb_b 都有id,name,sex 字段,根据id关联条件,用tb_b中的name字段更新tb_a中的name。
我们平时写的都是单条更新,如:update tb_x x set x = '***' where x.id = 1;遇到批量更新可以用merge也可以用update还可以用游标等。平时用的比较多的是merge和update
变相update:
UPDATE tb_a s
SET s.name = (
SELECT b.name FROM tb_b b WHERE s.id = b.id AND s.name != b.name
)
WHERE EXISTS (
SELECT 1 FROM tb_b b WHERE s.id = b.id AND s.name != b.name
内联视图法:
UPDATE (
SELECT
s.name as sname, b.name as bname
FROM
tb_a s, tb_b b
WHERE
s.id = b.id AND s.name != b.name
)
SET sname = bname;
merge法:
MERGE INTO tb_a s
USING tb_b b ON (
s.id = b.id
)
WHEN MATCHED THEN
UPDATE SET s.name = b.name;