簡體   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