【发布时间】:2018-11-25 23:02:34
【问题描述】:
这似乎很容易,但我已经找了几个小时了。
如何在目标表中插入临时表中不存在的行, 并同时删除临时表中确实存在的目标表中的行?它必须是交易安全的,在 teradata 中,并且如果可能的话是高性能的。
MERGE 显然不支持同时删除和插入。
【问题讨论】:
这似乎很容易,但我已经找了几个小时了。
如何在目标表中插入临时表中不存在的行, 并同时删除临时表中确实存在的目标表中的行?它必须是交易安全的,在 teradata 中,并且如果可能的话是高性能的。
MERGE 显然不支持同时删除和插入。
【问题讨论】:
除了临时/工作表之外,您还可以使用 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;
注意:如果有任何第三个表要从其中插入行到临时表中不存在的目标表中,则可以调整示例
【讨论】: