2016-07-15 40 views
-1

变化我有表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 

有两件事我想要做。

  1. 检查基于所述ID字段中的表的新记录和插入ID,地址为表B中作为一个新的行(重要)
  2. 检查改变地址字段在表A中是记录已经在表B中,并且更新它们并且如果地址已经改变,则清除表B中的纬度/长度值(不那么重要,但会很好)

表A得到更新,使用Drop/Create,吨需要听取更改我只是在寻找一个更新/插入查询可以做一个或两个这些。也可以是2个单独的查询。

更新: 我manged解决基于以下职位的第一部分,sql insert rows from another table based on condition抱歉,我想我已经搜查足够的答案。仍然不确定如何去做第二部分。使用SQL Server 2014解决评论。以下照顾我的第一部分。如何更新TableB中的TableBID = TableA.ID但地址字段不同?

INSERT INTO TableB (ID, ADDRESS) 
SELECT ID, ADDRESS 
    FROM TableA t 
WHERE NOT EXISTS 
(
    SELECT * 
    FROM TableA 
    WHERE ID = t.ID 
) 
+0

不能你去触发器 –

+2

MySQL或SQL服务器?请阅读[** How-to-Ask **](http://stackoverflow.com/help/how-to-ask) \t \t这里是[** START **](http ://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/),了解如何提高您的问题质量并获得更好的答案。 –

+0

已更新该问题是否有帮助。设法找到我已包含的第一部分的解决方案。 – Jack

回答

0

注 - 以下所有代码均适用于MS-SQL,因为您没有指定。

要检查表中的新记录不属于表B,基于ID,并将其插入到表B

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部分 - 更新表B的地址和明确的经纬度,如果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; 
相关问题