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

时间:2010-04-23 20:33:39

标签: sql duplicates sql-update

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

TableA具有来自不同时间(即唯一)的每条记录的描述性调查信息,而TableB具有纯粹的位置信息。但是,TableB中有许多重复项,但每个都有一个唯一的locationID,它在TableA中有一个条目。我发现了大量有关从TableB中删除重复项的帖子,但是如何更新TableA中的locationID,以便在删除重复项后将它们链接到TableB中的唯一位置...

非常感谢!

2 个答案:

答案 0 :(得分:1)

首先,在删除TableB中的重复项之前,必须更新TableA。如果没有,你将失去信息。

之后,让表B中的所有副本在一个字段中相等(比如说LocationDescription)

然后,选择所有它们的一个LocationID。我们说MIN位置ID。

之后,使用该MinID更新tableA,然后以非常简单的方式从TableB中删除重复项(使用NOT)。

以下是一个例子:

Asumming

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                                       

答案 1 :(得分:0)

当您找到重复内容时,您至少知道两个locationID。因此,在从TableB中删除之前,您可以更新TableA:

UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID = foundLocationID2

或者,如果您有一整个群组,您将立即删除:

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