我有两张桌子。
有什么问题?
我需要根据映射表2重新映射表1中的所有记录,特别是列A到列B. 但问题是表1包含的记录也包含表2中的值B(在A列中)。这意味着当我将重新映射表1时,可能会出现唯一性问题,因为表1中的列A是主键。
我试图选择所有必须重新映射的记录的数量,但我不确切地知道我的查询是否正确。
以下是这两个表:
select * from temp_1;
select * from temp_2;
以下是带计数的选择:
SELECT count(*) FROM temp_1 T1
WHERE EXISTS (SELECT 1 FROM temp_2 T2 WHERE T2.a = T1.a
and not exists (select 1 from temp_1 T1b where T2.b = T1b.a));
示例数据:
表1:
1,2,3,4,5, 40,50
表2:
1-11,2-22,3-33, 4-40,5-50
重新映射后的结果表1:
11,22,33, 4,5,40,50 剩余问题值
如果您了解我,这些粗体标记值是问题值。
答案 0 :(得分:0)
因此,您的表1包含A列,其中包含的值也可能显示为重新映射的新值。唯一的解决方案是使用临时表来部署新映射,完成后,将新映射复制到表1上。
答案 1 :(得分:0)
这不是答案 - 张贴为一个,以便格式化查询。
您可能想要检查PK约束是否可延迟。例如,您可以运行下面的查询。 ' ......'表示您的表名,单引号(以及所有大写)。如果表格不是您的,请查询ALL_CONSTRAINTS而不是USER_CONSTRAINTS。如果幸运的话,约束是可以推迟的。如果没有,我们可以考虑其他解决方案。祝你好运!
select constraint_name, deferrable, deferred
from user_constraints
where constraint_type = 'P'
and table_name = '.....'