如何通过加入另一个表只更新某些行来更新表中的列

时间:2016-11-16 22:02:05

标签: sql sql-server join sql-server-2014

我有两张桌子,A和B

 Table A

ID     | value                          
------ | ------                
1      |  20                 
2      |  21               
3      |  25

Table B

ID     | value         
------ | ------
1      |  15
2      |  10

我需要更新表A的值列,并使用表B的相应值。问题是表A每天都会更新,并且当它更新时 - 它会使用相同的旧值更新,所以我需要创建一个查询,以便它可以用作一个包来安排它每天运行正确的值。 此外,不应更改表B中未提供的某些ID及其对应值。有人可以帮我弄这个吗。 我正在使用sql server 2014

这是我正在使用的查询。

SELECT A.[SUBSTAT_NAME] ,A.[FDR_NUM] ,A.[XFMR_ID] ,A.[XFMR_SIZE] ,B.DRG_size ,A.[PAD_R] ,A.[CONDUCT_ID] ,A.[PHASE] ,A.[SRV_LOC_NUM] ,A.[BUS] ,A.DATE_TIME FROM [SERV_LOC_XFMR_GIS_PROD] A left join [XFMR_LESS_THAN_10] B on A.XFMR_ID = B.XFMR_ID

因此,当XFMR_ID匹配时,我需要用XFMR_SIZE替换DRG_SIZE值。但表A中的其余ID不应更改,应显示在结果

2 个答案:

答案 0 :(得分:2)

您需要使用以下一般语法:

update a
set a.c1 = b.c1
from tableA as a
inner join tableB as b on b.c2 = a.c2

首先用

测试
select a.c1, a.c2, b.c1, b.c2
from tableA as a
inner join tableB as b on b.c2 = a.c2

并查看您的联接是否产生正确的结果。然后写一个update语句。

答案 1 :(得分:1)

试试这个,但请务必先保存备份:

UPDATE A
SET A.value = B.value
FROM A, B
WHERE A.id = B.id