我有两个表tableA和tableB,通过locationID链接。
TableA具有来自不同时间(即唯一)的每条记录的描述性调查信息,而TableB具有纯粹的位置信息。但是,TableB中有许多重复项,但每个都有一个唯一的locationID,它在TableA中有一个条目。我发现了大量有关从TableB中删除重复项的帖子,但是如何更新TableA中的locationID,以便在删除重复项后将它们链接到TableB中的唯一位置...
非常感谢!
答案 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)