SQL将列更新为等于连接中的列并使用子查询

时间:2014-03-05 08:46:28

标签: sql sql-server tsql

我有两个处理库存的表,最近一直不同步。

数据需要更新才能再次同步,tableB始终是正确的,因此我们将更新基于此表,并使用此表中的数据更新tableA

我正在尝试通过加入进行更新。

使用以下代码,我尝试了多种不同的更新方式,例如使用xcolumn2上的where语句,删除选择部分等。

我是否缺少一段语法,或者我对此采取了错误的方法?

update tableA
set tableA.columnA = tableB.columnA

--select
--tableA.xcolumn2,
--tableA.columnA,
--tableB.columnA, 

--from tableA as tableA
left join 
(select xcolumn1, xcolumn2, sum(columnA) as columnA, sum(xcolumn3) as xcolumn3 
from tableB as tableB group by xcolumn1, xcolumn2) as tableB
on tableA.xcolumn2 = tableB.xcolumn2


group by 
tableA.xcolumn2,
tableA.columnA, 
tableB.columnA,
having sum(tableA.columnA) != sum(tableB.columnA)

1 个答案:

答案 0 :(得分:2)

我想你的更新应该是这样的:

UPDATE  tableA
SET     tableA.columnA = tableB.columnA
FROM    tableA
JOIN    ( SELECT   xcolumn1 ,
                   xcolumn2 ,
                   SUM(columnA) AS columnA
          FROM     tableB AS tableB
          GROUP BY xcolumn1 ,
                   xcolumn2
        ) AS tableB 
ON tableA.xcolumn2 = tableB.xcolumn2
AND tableA.xcolumn1 = tableB.xcolumn1
AND (tableA.columnA <> tableB.columnA
     OR tableA.columnA IS NULL)