繁体   English   中英

根据映射表更新表列主键

[英]Update table column primary key based on mapping table

我有两张桌子。

  1. 表包含列A(类型编号,主键)的记录。
  2. 表包含列A,B(类型编号)的记录。 第二个表示映射表。

问题是什么?

我需要根据映射表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,4-50

重映射后的结果表1:
11,22,33,4,5,40,50 剩余问题值

如果您了解我,这些粗体标记值是问题值。

因此,您的表1包含A列,其中包含的值也可能显示为重新映射的新值。 唯一的解决方案是使用临时表来部署新映射,完成后,将新映射复制到表1上。

这不是一个答案 - 作为一个发布,因此可以格式化查询。

您可能想要检查PK约束是否可以推迟。 例如,您可以运行下面的查询。 '......'表示您的表名,单引号(以及所有大写)。 如果表不是您的,请查询ALL_CONSTRAINTS而不是USER_CONSTRAINTS。 如果幸运的话,约束是可以推迟的。 如果没有,我们可以考虑其他解决方案。 祝好运!

select constraint_name, deferrable, deferred
from   user_constraints
where  constraint_type = 'P'
  and  table_name = '.....'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM