我有兩個表tableA和tableB,通過locationID鏈接。表A具有來自不同時間(即唯一)的每條記錄的描述性調查信息,而表B具有純粹的位置信息。但是,TableB中有很多重複項,但每個都有一個唯一的locationID,它在TableA中有一個條目。我發現很多關於從TableB中刪除重複的帖子,但是我怎樣才能更新TableA中的locationIDs,以便在刪除重複項時將它們鏈接到TableB中的獨特位置...刪除重複項並更新鏈接到非重複項的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