Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server中更新和删除副本?_Sql_Sql Server_Database_Sql Update - Fatal编程技术网

如何在SQL Server中更新和删除副本?

如何在SQL Server中更新和删除副本?,sql,sql-server,database,sql-update,Sql,Sql Server,Database,Sql Update,我有两个表Add(父表)和AddXref(子表),希望删除父表中的重复记录,同时更新子表中的记录。在AddXref表中,这两条记录应该有来自Add表的AddId中的任何一条。我尝试使用basic update语句,但它不起作用。如何更新AddXref表 我的尝试: 到目前为止,我已经编写了这个查询,但我仍在思考下一步该怎么做 Update AddXref name SET a.AddId=b.AddId FROM AddXref a INNER JOIN Add b ON a.AddId = b

我有两个表Add(父表)和AddXref(子表),希望删除父表中的重复记录,同时更新子表中的记录。在AddXref表中,这两条记录应该有来自Add表的AddId中的任何一条。我尝试使用basic update语句,但它不起作用。如何更新AddXref表

我的尝试: 到目前为止,我已经编写了这个查询,但我仍在思考下一步该怎么做

Update AddXref name
SET a.AddId=b.AddId
FROM AddXref a
INNER JOIN Add b ON a.AddId = b.AddId
WHERE b.AddId = ( Select Top 1 ax.Addid from Add ax
                  INNER JOIN Add ax1  on
ax.AddressMain = a.AddressMain and
              ax.city = a.city and
              ax.Country = a.Country and
              ax.State = a.State and
              ax.ZipCode = a.ZipCode);

| AddId  | AddressMain  | City    | Country | State   | ZipCode    |
|--------|--------------|---------|---------|---------|------------|
| 8CA25D | 1234 Main St | Antioch | USA     | Florida | 60002-9714 |
| 5T7YTR | 1234 Main St | Antioch | USA     | Florida | 60002-9714 |

| AddXrefId | AddressId | IndividualId | InstitutionId |
|-----------|-----------|--------------|---------------|
| 822145    | 8CA25D    | 7652ER       | NULL          |
| 435902    | 5T7YTR    | NULL         | NA1043        |


| AddXrefId | AddressId | IndividualId | InstitutionId |
|-----------|-----------|--------------|---------------|
| 822145    | 8CA25D    | 7652ER       | NULL          |
| 435902    | 8CA25D    | NULL         | NA1043        | --Output either "8CA25D" or "5T7YTR" any one of it

首先收集重复数据

select AddressMain, City, Country, State, ZipCode, min(addId) as minID, Max(addId) as MAxID
INTO #tmpData
from add
group by AddressMain, City, Country, State, ZipCode
第二次更新子表

Update AddXref 
SET a.AddId=b.MaxID
FROM AddXref a
INNER JOIN #tmpData b ON a.AddId = b.MinID -- you can use maxId too if you want.
第三,从父项中删除重复记录

DELETE FROM Add where AddId IN (Select MinID FROM #tmpData)

此代码未经测试。

此问题有点不清楚。你到底想达到什么目的?到目前为止你试过什么?您是否正在尝试根据第一个表中的匹配项更新第二个表?哪些领域?也许可以举一个前后数据的例子。很可能您无法用一条语句完成所有操作。请使用group by获得min和max addid,并首先更新child,然后从家长处删除。(假设child将有FK,而您只有2条相同的记录)@SteveShipway在上述情况下,我必须删除“添加”中的任何一条记录Add表格中剩余的表格和记录应为update ADDREF.AddId column@AJP中的两条记录update语句不适用于某些具有类似结构的表格。还有别的办法解决这个问题吗?