我有一个表需要使用另一个表中的数据进行更新。问题是两个表之间没有外键关系。但是,有第三个表具有这种关系。
以下是表格:
父表:
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
答案 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=''