我正在将数据加载到“临时”数据库模式中的父子对表中。如果存在以前加载到“主”数据库模式中的父子对表的重复记录,我想从“登台”数据库表中删除它们。
此查询
SELECT A.*,B.*
FROM STG.AUTO_REPR_PAR_STG A
JOIN STG.AUTO_REPR_CHLD_STG B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM
WHERE EXISTS ( SELECT A.*, B.*
FROM MST.AUTO_REPR_PAR A
JOIN MST.AUTO_REPR_CHLD B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM
)
将显示以前在master中加载的暂存内容。但是如何从登台数据库中的父子对表中删除?我正在画一个“空白”....我试过这个,但是炸弹(“FROM子句中不允许使用表格”):
DELETE FROM STG.AUTO_REPR_PAR_STG A
JOIN STG.AUTO_REPR_CHLD_STG B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM
WHERE EXISTS (SELECT A.*, B.*
FROM MST.AUTO_REPR_PAR A
JOIN MST.AUTO_REPR_CHLD B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM
)
后端是Teradata v13。我目前正在研究CASCADE DELETE选项,但我甚至不确定它是否受支持....任何想法?
答案 0 :(得分:3)
在单个DELETE语句中无法从多个表中删除,每个表需要一个:
DELETE FROM STG.AUTO_REPR_PAR_STG A
WHERE TEST_SEQ_NUM IN (
SELECT A.TEST_SEQ_NUM FROM MST.AUTO_REPR_PAR A JOIN MST.AUTO_REPR_CHLD B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM )
;DELETE FROM STG.AUTO_REPR_CHLD_STG B
WHERE TEST_SEQ_NUM IN (
SELECT A.TEST_SEQ_NUM FROM MST.AUTO_REPR_PAR A JOIN MST.AUTO_REPR_CHLD B
ON A.TEST_SEQ_NUM=B.TEST_SEQ_NUM )
如果您将此作为多语句请求运行,则加入仅执行一次。
答案 1 :(得分:0)
您可以尝试这样的事情:
与具有EXISTS的子查询相比,OUTER JOIN更有效,特别是对于大型数据集。