这似乎很容易,但是我已经找了几个小时了。
如何在目标表中插入临时表中不存在的行, 并同时删除目标表中确实存在于临时表中的行?它必须是事务安全的,并且必须在Teradata中,并且如果可能的话,应具有高性能。
MERGE显然不支持同时删除和插入。
答案 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;
注意:如果有第三张表要插入的行插入目标表中而不存在,则可以调整该示例