SQL Server:在同一个表中更新具有依赖项的行

时间:2018-02-23 11:00:06

标签: sql sql-server sql-update

有表CSBaumkontakt,在此表中,我与联系人和公司联系。 CSBaumkontakt是这样的树结构:

[+] master company (Root)
  [+] company (Dad)
    [+] contact person 

联系人的公司(Dad)与公司的DadPubIndexRelPubIndex相关联。如果公司的DadRoot与联系人的Root相同,则应用程序才能正常运行。这意味着联系人的RootPubIndex必须与其公司的DadPubindexRootPubindex相同。但情况并非总是如此。

之前的更改:

联系人

[RelPubIndex] [9FC6CD387AE91B46A471E1B82963E36A]
[RooPubIndex] [F7BC36A0-AD4F-49D5-B4FC-AD529C7EA738]
[DadPubIndex] [2143640C-3ABF-440C-B094-2128F4495874]
[class] [contact person]

联系人公司

[RelPubIndex] [2143640C-3ABF-440C-B094-2128F4495874]  
[RootPubIndex] [D66035CB-B7AD-4D54-9FC7-AE6E7F32662D]  
[DadPubIndex] [D66035CB-B7AD-4D54-9FC7-AE6E7F32662D]
[class] [company]

CSBaumkontakt before change

更改之后,它看起来像这样:

联系人

[RelPubIndex] [9FC6CD387AE91B46A471E1B82963E36A]
[RooPubIndex] [D66035CB-B7AD-4D54-9FC7-AE6E7F32662D]
[DadPubIndex] [2143640C-3ABF-440C-B094-2128F4495874]
[class] [contact person]

联系人公司

[RelPubIndex] [2143640C-3ABF-440C-B094-2128F4495874]  
[RootPubIndex] [D66035CB-B7AD-4D54-9FC7-AE6E7F32662D]  
[DadPubIndex] [D66035CB-B7AD-4D54-9FC7-AE6E7F32662D]
[class] [company]

enter image description here

现在我需要一个UPDATE脚本,将每个联系人的RooPubIndex设置为DadPubindex / RootPubIndex(如果相同,但通常应如此)来自其公司。

我有点不知道如何将同一个表中的那些行连接到具有所需值的记录UPDATE。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:0)

我想我已经找到了解决方案。仍然需要审查数据,但它似乎有效。

update csbaum1 set csbaum1.rootpubindex = csbaum2.DadPubIndex  
from CSBaumKontakt as csbaum1  
inner join CSBaumKontakt as csbaum2 
on csbaum1.DadPubIndex = csbaum2.RelPubIndex  
where csbaum1.Klasse = 'contact person'  
and csbaum1.RootPubIndex <> csbaum2.DadPubIndex  
and csbaum2.RootPubIndex = csbaum2.dadpubindex

感谢阅读。