--UPDATE写法1
UPDATE (
SELECT
T1.sort sort,
T2.new_sort new_sort
FROM
sc_test T1,
(
SELECT
id,
(ROW_NUMBER ( ) OVER ( PARTITION BY org ORDER BY sort ASC )) AS new_sort //重新排序
FROM
sc_test
) T2
WHERE
T1.id = T2.id
)
SET sort = new_sort;
-- UPDATE写法2
UPDATE A SET A.name = (SELECT B.name FROM B WHERE A.id= B.id)
WHERE EXISTS (SELECT 1 FROM B WHERE B.id= A.id)
注意:如果表B中有多条数据和表A对应的话,会报错
--MERGE INTO 写法
MERGE INTO sc_test target_table --主表,即需要被修改的表
USING (
SELECT
id,
(ROW_NUMBER ( ) OVER ( PARTITION BY org ORDER BY sort ASC ) ) AS new_sort
FROM
sc_test
WHERE
org IN ( SELECT org FROM sc_test HAVING COUNT( sort ) > 1 GROUP BY sort, org )
) source_table --从表,即来源表
ON ( target_table.id = source_table.id ) --连接条件
WHEN MATCHED --在匹配的记录中进行 交集则更新
THEN UPDATE SET --更改主表信息
target_table.sort = source_table.new_sort
WHEN NOT MATCHED BY TARGET --源表中有,目标表中无则新增
THEN INSERT (id, sort, org)
VALUES (source_table .category_id, source_table .category_name, source_table.amount)
WHEN NOT MATCHED BY SOURCE --源表中无,目标表中有则删除
THEN DELETE;
orcale根据一张表更新另一张表
于 2023-03-24 19:54:46 首次发布