我有一张桌子A和一张桌子。
表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
现在让我们说John将他的国家/地区位置更改为英国,然后表A中的相应条目看起来像这样
Table A: ( sample record )
1, John, UK, checkSumChanged, ... other columns
现在我需要相应地更新我的表格B,这样它不应该将John作为美国的位置,而应该将它作为英国。 列校验和在这里很有用,因为如果任何列发生更改,其值将在表A中更改。
这是我坚持的部分。无法仅更新表A到表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
任何想法或建议如何更正我的查询以更新已更改的记录。
提前致谢!!!
答案 0 :(得分:2)
没有加入时这样做:
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;