2017-04-07 90 views
0

我有幾個其中需要的表的下面數據差異的正確值,以使用更新的查詢在SQLSQL:比較表數據,並更新表

主表(以表A)表包含來校正對於相同的產品如低於2主鍵值,

------------------ 
PRRFNBR|PRNBR 
-------|-------- 
XXXX |123 
YYYY |123 
---------------- 

而在2個表像下面使用這些參考鍵,

表B:

---------------------- 
SUPRFNBR |SUSPRNBR 
--------------------- 
XXXX  | 234 
------------------- 

表C:

------------------- 
SEPRFNBR | SESUPRNBR 
------------------- 
YYYY  | 435 
-------------------- 

現在我需要比較所有這3個表,並在表B(SUPRFNBR)可參照鍵表C更新SEPRFNBR(如參考關鍵XXXX必須更新在表C中,如果相同的PRNBR是具有表A 2個主鍵值)

+0

你能否多解釋一下邏輯?到目前爲止,我認爲你希望表C更新爲表A和表B的大部分 - 你對最後一句話意味着什麼?更多的細節或例子將有所幫助 – MichaelTiefenbacher

+0

嗨邁克爾,邏輯工作是這樣的,當我在表C中插入一條記錄時,它使用來自表A的不同參考號而不是表B中使用的相同參考號(例如,如果使用xxxx表b然後該程序使用表C中的YYYY而不是XXXX我現在無法更改插入函數,因爲活動訂單被映射到兩個參考數字,因此作爲一種解決方法,我需要更新表C中的記錄如果給定的行在表A中具有多於2個參考號),則在表B(XXXX)中使用相同的參考號。 –

+0

你的意思是說在表C中你想把YYYY改成XXXX嗎? – 2017-04-10 08:59:49

回答

0

你的邏輯 - 只要理解 - 不需要如不同SUPRFNBR &表A的參考SEPRFNBR有資格獲得更新

update c set SEPRFNBR = (select SUPRFNBR from b where b.SUPRNBR = c.SEPRNBR) 

如果出於某種(未描述的)原因的查找表A是必要,可以延長所以像

update c set SEPRFNBR = (select SUPRFNBR from b 
          where b.SUPRNBR = c.SEPRNBR) 
          and (select count(*) from a 
            where b.SUPRNBR = a.PRNBR) > 1)" 

您可以根據您可能有其他方面的限制有所不同的解決方案。這只是一個解決方案的想法。

+0

感謝Michael的SQL。現在我修改了表B和表C中的值以顯示數據庫中可用的數據。表B和C只包含參考數字,而不包括參考表B和C來執行直接更新的實際產品編號。請您仔細查看它並讓我知道如何更新表C中的參考鍵,如同TABLE B? –

+0

因此,無法檢查表A中是否有兩個數字(它們屬於一起),並且描述的邏輯不完整。 – MichaelTiefenbacher

+0

我在下面的鏈接中添加了更多詳細信息,請使用http://stackoverflow.com/questions/43365754/compare-rows-using-a-cursor-in-db2-and-perform-update查看它並讓我知道如何使用db2中的遊標來獲得預期的結果? –