2010-01-28 64 views
7

全部都是,从表b更新表a其中(条件)

实际上,这是夜晚。晚上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 

或者至少......我觉得这就是我想做的事...

有人可以帮助我,请

回答

11

您可以通过参加在更新这样做:

Update a 
Set a.importantField = b.importantField 
From a Join b 
    On a.matchfield = b.matchfield 
    And a.matchfield2 = b.matchfield2 
+1

先生,你是一个天才。 ...我真的很累,不想去做一个加入... 我现在可以回家了,这一切都要感谢你! D – 2010-01-28 23:31:48

+0

@Cosmic:很高兴它适合你...我不得不再次检查这个工作,最近在LINQ里面花了太多时间:) – 2010-01-28 23:47:20

+0

我想你需要为'a设置一个别名'表为了这个工作,或者我错过了什么? – 2016-10-13 12:23:22

3

使用:

UPDATE TABLE_A 
    SET importantField = (SELECT b.importantfield 
          FROM TABLE_B b 
          WHERE b.matchfield = matchfield 
          AND b.matchfield2 = matchfield2) 

SQL Server不支持对表的表别名更新,但上面的一个关联查询 - 无需附加的任期将从TABLE_A值,因为它没有一个表的别名b这些领域别名。

除此之外,唯一的问题是如果具有与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值。

+0

非常感谢您抽出宝贵时间给我写信。我最终没有使用您的解决方案,但无论如何我要感谢您。所以谢谢 :) – 2010-01-28 23:32:51

相关问题