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