2010-04-23 72 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)