从另一个表更新

时间:2013-07-08 23:35:51

标签: sql sql-server tsql

我有一个表需要使用另一个表中的数据进行更新。问题是两个表之间没有外键关系。但是,有第三个表具有这种关系。

以下是表格:

父表:

ParentKey     ParentField
-------------------
 p1           aaa
 p2           bbb
 p3           ccc

子表:

ChildKey     ChildField
-------------------
 c1           ccc
 c2        
 c3

关系表:

ParentKey    ChildKey
-------------------
 p1          c2
 p2          c3
 p3          c1

这是我想要做的...如果Child表在ChildField中没有值,那么我想用相应的ParentField的值更新ChildField。所以基本上我的最终结果应该是这样的:

子表:

ChildKey     ChildField
-------------------
 c1           ccc
 c2           aaa
 c3           bbb

2 个答案:

答案 0 :(得分:2)

即使没有外键,您仍然可以将两个表连接在一起进行更新:

update      child
set         childfield = parent.parentfield
from        child
inner join  Relationship on Relationship.ChildKey = Child.ChildKey
INNER JOIN  Parent on PArent.ParentKey = Relationship.ParentKey
WHERE       Child.ChildField IS NULL

这应该在Microsoft SQL Server中有效。很确定它也可以在其他地方使用

答案 1 :(得分:0)

这对你有用;

UPDATE ChildTable ct SET ct.ChildField = 
    (SELECT MAX(ParentField) FROM ParentTable pt 
    INNER JOIN RelationshipTable rt ON rt.ParentKey=pt.ParentKey 
    WHERE rt.ChildKey=ct.ChildKey)
WHERE ct.ChildField IS NULL 

如果您的空ChieldField为空字符串而不是NULL,请尝试

UPDATE ChildTable ct SET ct.ChildField = 
    ISNULL((SELECT MAX(ParentField) FROM ParentTable pt 
    INNER JOIN RelationshipTable rt ON rt.ParentKey=pt.ParentKey 
    WHERE rt.ChildKey=ct.ChildKey),'')
WHERE ct.ChildField=''