我有表A
ID | Address | Field1 | Field2 | etc
1 | 1 Smith St | a | sd | sdf
2 | 2 Smith St | b | sf | ff
我创建了另一个表B,其中只包含ID和地址以及2个用于纬度和经度的额外字段,我用一个单独的脚本填充
ID | Address | Lat | Long
1 | 1 Smith St | 20.23 | 110.34
2 | 2 Smith St | 18.34 | 112.43
我想做两件事。
表A使用Drop / Create进行更新,因此我不需要监听更改,我只是在寻找可以执行其中一个或两个的更新/插入查询。也可以是2个单独的查询。
更新 我已经根据以下帖子解决了第一部分,sql insert rows from another table based on condition抱歉,我认为我已经搜索了足够的答案。仍不确定如何进行第二部分。使用SQL Server 2014来解决注释。以下为我处理第一部分。如何更新TableB中TableB.ID = TableA.ID但地址字段不同的行?
INSERT INTO TableB (ID, ADDRESS)
SELECT ID, ADDRESS
FROM TableA t
WHERE NOT EXISTS
(
SELECT *
FROM TableA
WHERE ID = t.ID
)
答案 0 :(得分:0)
注意 - 以下所有代码均适用于MS-SQL,因为您没有指定。
根据ID检查表A中不在表B中的新记录,并将它们插入TableB
Insert Into TableB (ID, Address)
Select A.ID, A.Address
From TableA A
Left Join TableB B on B.ID = A.ID
Where B.ID is null;
第2部分 - 更新TableB地址并清除lat,如果Id匹配但地址不同
Update B set Address = A.Address, Lat = NULL, Long = NULL
From TableB B
Inner Join TableA A on A.ID = B.ID
Where A.Address <> B.Address;