我正在将数据加载到“暂存”数据库模式中的父子表对中。如果之前加载到“主”数据库模式中的父子对表中的重复记录,我想从“暂存”数据库表中删除它们。
此查询
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 中加载的 staging 内容。但是如何从临时数据库中的父子表对中删除呢?我正在绘制一个“空白”......我尝试了这个,但它失败了(“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 选项,但我什至不确定它是否受支持......有什么想法吗?
最佳答案
无法在单个 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 )
如果您将其作为多语句请求运行,则联接将仅完成一次。
关于sql - 删除在另一个父子表中找到的父子表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24249440/