寻求Teradata合并替代方案

时间:2020-02-20 18:20:31

标签: sql teradata

我有一个使用Merge语句的现有过程。现在,我需要在其中一个表中添加其他列。我向表A的主索引中添加了一个新字段,但是该数据在表B(合并源)中不存在,因此合并失败。如果删除表A上的主索引,合并也会失败。

-- TABLEA Primary Index - COL1,COL2,COL3,COL4,COL5,COL6
-- TABLEB No Primary Index

Merge into TableA
Using TableB
on A.COL1 = B.COL1
AND A.COL2 = B.COL2
AND A.COL3 = B.COL3
AND A.COL4 = B.COL4

这将产生错误消息:“ MERGE失败。[5758]搜索条件必须完全指定目标表的主索引和分区列,并且表达式必须与INSERT规范的主索引和分区列匹配。 “

如果我从TableA中删除了主键,则会收到以下消息:“ MERGE Failed。[9252]在没有主索引的表上尝试了无效的语句:不允许合并到NoPI表中。” < / em>

因此,如果我不能使用合并,因为TableB没有TableA的“主索引”列,我有哪些选择?我不确定是否还有其他Teradata函数。

我尝试了此操作,但是它没有在TableB中找到记录,而这些记录不在TableA中:

SELECT B.COL1
 			,B.COL2
 			,B.COL11
 			,B.COL8
			,B.COL9
			,B.COL3
			,B.COL4
			,'N'
FROM TABLEB B			
WHERE NOT EXISTS (SELECT 1
					FROM TABLEA A
					INNER JOIN TABLEB B
						ON B.COL1 = A.COL1
	 					AND B.COL2 = A.COL2
	 					AND B.COL3 = A.COL3
	 					AND B.COL4 = A.COL4)

1 个答案:

答案 0 :(得分:0)

可能无需在现有PI PI <> PK中添加另一列。

关于NOT EXISTS查询,它是一个不相关的子查询,如果有匹配的行,则结果为true。您需要一个相关的子查询:

SELECT B.COL1
            ,B.COL2
            ,B.COL11
            ,B.COL8
            ,B.COL9
            ,B.COL3
            ,B.COL4
            ,'N'
FROM TABLEB B           
WHERE NOT EXISTS (SELECT 1
                    FROM TABLEA A
                    WHERE B.COL1 = A.COL1
                        AND B.COL2 = A.COL2
                        AND B.COL3 = A.COL3
                        AND B.COL4 = A.COL4)