Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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 删除重复项并更新链接到非重复项的ID_Sql_Duplicates_Sql Update - Fatal编程技术网

Sql 删除重复项并更新链接到非重复项的ID

Sql 删除重复项并更新链接到非重复项的ID,sql,duplicates,sql-update,Sql,Duplicates,Sql Update,我有两个表,tableA和tableB,通过locationID链接 表a包含不同时间(即唯一)的每个记录的描述性调查信息,而表B仅包含位置信息。然而,在TableB中有很多重复项,但是每个都有一个唯一的locationID,它在TableA中有一个条目。我找到了很多关于从TableB中删除重复项的帖子,但是我如何更新TableA中的LocationID,以便在删除重复项后将它们链接到TableB中的唯一位置 非常感谢您的帮助 当您找到一个副本时,您至少知道两个locationIDs。因此,在从

我有两个表,tableA和tableB,通过locationID链接

表a包含不同时间(即唯一)的每个记录的描述性调查信息,而表B仅包含位置信息。然而,在TableB中有很多重复项,但是每个都有一个唯一的locationID,它在TableA中有一个条目。我找到了很多关于从TableB中删除重复项的帖子,但是我如何更新TableA中的LocationID,以便在删除重复项后将它们链接到TableB中的唯一位置


非常感谢您的帮助

当您找到一个副本时,您至少知道两个
locationID
s。因此,在从TableB中删除之前,您可以更新TableA:

UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID = foundLocationID2
或者,如果您有一个完整的组,您将立即删除:

UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID IN (foundLocationID2, foundLocationID3, foundLocationID4)

首先,在删除TableB中的重复项之前,必须更新TableA。否则,你将丢失信息

之后,在一个字段中使表B中的所有重复项相等(比如LocationDescription)

然后,选择其中一个LocationID。比如说最小位置ID

在那之后,用那个MinID更新tableA,然后用一种非常简单的方式从tableab中删除重复的内容(a不在)

下面是一个例子:

粉碎

TableA:                                 Table B

Location ID                             LocationId  LocationDescription
   1                                       1        Neuquen
   2                                       2        Cipolletti
   3                                       3        Neuquen
   4                                       4        Cipolletti
   5                                       5        Neuquen

UPDATE TableA
SET locationID=TABLEBAUX.UniqueID
FROM TableA 
INNER JOIN 
(
SELECT UniqueID, LocationID
FROM 
(SELECT MIN(LocationID) as UniqueID,LocationDescription
FROM TableB
GROUP BY LocationDescription) TEMP
INNER JOIN TableB
ON TEMP.LocationDescription=TABLEB.LocationDescription) TABLEBAUX
ON TableA.LocationID=TABLEBAUX.LocationID

DELETE FROM TableB 
WHERE LocationID NOT in (SELECT LocationID FROM TABLEA)
在此之后,您将获得以下信息:

TableA:                                 Table B

Location ID                             LocationId  LocationDescription
   1                                       1        Neuquen
   2                                       2        Cipolletti
   1                                       
   2                                       
   1