[英]Update a column based on the primary key present in a different column of the same table
[英]Update table column primary key based on mapping table
我有两张桌子。
问题是什么?
我需要根据映射表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.