删除重复项并更新链接到非重复项的ID
问题描述:
我有两个表tableA和tableB,通过locationID链接。表A具有来自不同时间(即唯一)的每条记录的描述性调查信息,而表B具有纯粹的位置信息。但是,TableB中有很多重复项,但每个都有一个唯一的locationID,它在TableA中有一个条目。我发现很多关于从TableB中删除重复的帖子,但是我怎样才能更新TableA中的locationIDs,以便在删除重复项时将它们链接到TableB中的独特位置...删除重复项并更新链接到非重复项的ID
非常感谢!
答
首先你必须在删除TableB中的重复项之前更新TableA。如果没有,你会失去信息。
之后,使表B中的一个字段等于所有副本(假设LocationDescription)
然后全部选中一个LocationID。我们说MIN的位置ID。
之后,使用该MinID更新tableA,然后以非常简单的方式(使用NOT in)从TableB中删除重复项。
Here's一个例子:
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
答
当您发现重复时,您至少知道两个locationID
s。因此,从表B中删除之前,您可以更新表A:
UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID = foundLocationID2
或者,如果你有一整组你要删除一次:
UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID IN (foundLocationID2, foundLocationID3, foundLocationID4)
这正是我需要的,谢谢! – julian 2010-04-27 14:48:38
我很乐意提供帮助。 – Claudia 2010-04-27 17:13:25