2010-04-23 67 views
0

我有两个表tableA和tableB,通过locationID链接。表A具有来自不同时间(即唯一)的每条记录的描述性调查信息,而表B具有纯粹的位置信息。但是,TableB中有很多重复项,但每个都有一个唯一的locationID,它在TableA中有一个条目。我发现很多关于从TableB中删除重复的帖子,但是我怎样才能更新TableA中的locationIDs,以便在删除重复项时将它们链接到TableB中的独特位置...删除重复项并更新链接到非重复项的ID

非常感谢!

回答

1

首先你必须在删除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          
+0

这正是我需要的,谢谢! – julian 2010-04-27 14:48:38

+0

我很乐意提供帮助。 – Claudia 2010-04-27 17:13:25

0

当您发现重复时,您至少知道两个locationID s。因此,从表B中删除之前,您可以更新表A:

UPDATE TableA 
SET locationID = foundLocationID1 
WHERE locationID = foundLocationID2 

或者,如果你有一整组你要删除一次:

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