晚上好,
实际上,现在是晚上。晚上11点左右。我的大脑正在关闭,我需要一点帮助才能完成并回家:)
我有两张桌子 - 桌子a和桌子b。 当另外两个字段匹配时,我需要使用表b中字段的值更新表a中的字段。这些表没有每条记录的唯一ID:(
基本上,我想这样做:
update a
set importantField =
(select b.importantfield
from b
where a.matchfield = b.matchfield
and a.matchfield2 = b.matchfield2
)
where a.matchfield = b.matchfield
and a.matchfield2 = b.matchfield2
或者至少......我认为这就是我想做的......
有人可以帮帮我吗?
答案 0 :(得分:13)
您可以通过更新中的联接来执行此操作:
Update a
Set a.importantField = b.importantField
From a Join b
On a.matchfield = b.matchfield
And a.matchfield2 = b.matchfield2
答案 1 :(得分:3)
使用:
UPDATE TABLE_A
SET importantField = (SELECT b.importantfield
FROM TABLE_B b
WHERE b.matchfield = matchfield
AND b.matchfield2 = matchfield2)
SQL Server不支持正在更新的表上的表别名,但上面是一个相关查询 - 那些没有附加表别名b
的字段将提供来自TABLE_A
的值,因为它没有'有一个别名。
除此之外唯一的问题是,对于具有与TABLE_A匹配的记录的记录,有多个b.importantfield
值。使用:
UPDATE TABLE_A
SET importantField = (SELECT TOP 1
b.importantfield
FROM TABLE_B b
WHERE b.matchfield = matchfield
AND b.matchfield2 = matchfield2)
..但您也应该使用ORDER BY
,否则您将获得任意值b.importantfield
。