根据映射表更新表列主键

时间:2016-08-03 15:30:31

标签: sql oracle mapping

我有两张桌子。

  1. 表包含列A(类型编号,主键)的记录。
  2. 表包含列A,B(类型编号)的记录。第二个代表映射表。
  3. 有什么问题?

    我需要根据映射表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 剩余问题值

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

2 个答案:

答案 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 = '.....'