我有一个使用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)
答案 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)