从临时表中删除其他UPDATE

时间:2018-11-23 17:03:06

标签: merge teradata

这似乎很容易,但是我已经找了几个小时了。

如何在目标表中插入临时表中不存在的行, 并同时删除目标表中确实存在于临时表中的行?它必须是事务安全的,并且必须在Teradata中,并且如果可能的话,应具有高性能。

MERGE显然不支持同时删除和插入。

1 个答案:

答案 0 :(得分:0)

与临时/工作表一起,您可以使用BTET来确保删除和插入事务的安全性。 下面显示的示例示例

CREATE TABLE temp_Table_2 AS (SELECT * FROM target_Table WHERE EXISTS (SELECT 1 FROM temp_Table WHERE target_Table.key_cols = temp_Table.key_cols)) WITH DATA;

BT;

--First delete rows which are present in temp table
DELETE FROM target_Table WHERE EXISTS (SELECT 1 FROM temp_Table WHERE target_Table.key_cols = temp_Table.key_cols);

--Second Insert rows which were not exist in target table 
INSERT INTO target_Table
col_1,
col_1,
.
.
col_n
)
SELECT 
col_1,
col_1,
.
.
col_n
 FROM temp_Table
WHERE  NOT EXISTS (SELECT 1 FROM temp_Table_2 WHERE temp_Table_2.key_cols = temp_Table.key_cols);

ET;

DROP TABLE temp_Table_2;

注意:如果有第三张表要插入的行插入目标表中而不存在,则可以调整该示例