我有一张桌子A和一张桌子B。
表A是从表B创建的(以及其他一些表连接操作)。
表A的所有列都是表B中列的子集。
表A和表B中有一列称为check_sum。这基本上是一个计算列,如果任何列值发生变化,那么check_sum(计算值)也会发生变化。
例如:
Table A ( schema ):
cust_id ( pk ), cust_name, cust_location, check_sum ... other columns ( no need to worry about them )
Table B ( schema ) :
cust_id ( pk ), cust_name, cust_location, check_sum
最初,表B和A具有如下条目:
Table A: ( sample record )
1, John, USA, abc222abc, ... other columns
Table B: ( sample record )
1, John, USA, abc222abc
现在假设约翰将他的国家/地区更改为英国,然后表A中的相应条目如下所示
Table A: ( sample record )
1, John, UK, checkSumChanged, ... other columns
现在,我需要相应地更新我的表B,这样就应该将其作为英国而不是约翰在美国的位置。
列校验和在这里很有用,因为如果任何列更改,表A中的值都会更改。
这就是我坚持的部分。无法仅将表A的“ CHANGED”行更新到表B。我在下面有以下查询。它正在更新所有行,而不仅仅是更新的行。
这是查询。
UPDATE tableB
SET
tableB.cust_name = tableA.cust_name,
tableB.cust_location = tableA.cust_location,
tableB.check_sum = tableA.check_sum
FROM
tableA inner join tableB
on tableA.cust_id = tableB.cust_id
and tableA.check_sum != tableB.check_sum
任何想法或建议,我该如何更正我的查询以仅更新已更改的记录。
提前致谢!!!
最佳答案
无需加入即可:
update B
SET cust_name = a.cust_name, checksum = a.checksum, cust_location = a.cust_location
FROM a
WHERE a.custid = b.custid AND a.checksum != b.checksum;