Удалить дубликаты и обновить идентификаторы, связанные с не дубликатами - PullRequest
0 голосов
/ 24 апреля 2010

У меня есть две таблицы, tableA и tableB, связанные через locationID.

В TableA имеется описательная информация об опросе для каждой записи в разное время (т. Е. Уникально), в то время как в TableB имеется информация только о местоположении. Однако в TableB есть много дубликатов, но каждый из них имеет уникальный locationID, который имеет запись в TableA. Я нашел много сообщений об удалении дубликатов из TableB, но как я могу обновить locationIDs в TableA, чтобы они связывались с уникальными местоположениями в TableB после удаления дубликатов ...

Помощь очень ценится!

Ответы [ 2 ]

1 голос
/ 24 апреля 2010

Прежде всего вам необходимо обновить TableA, прежде чем удалять дубликаты в TableB. Если нет, вы потеряете информацию.

После этого сделайте все дубликаты в таблице B равными в одном поле (скажем, LocationDescription)

Затем выберите один LocationID из всех. Допустим, идентификатор местоположения MIN.

После этого обновите tableA с этим MinID, а затем удалите дубликаты из TableB действительно простым способом (без NOT in).

Вот пример:

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 голосов
/ 24 апреля 2010

Когда вы найдете дубликат, вы знаете как минимум два locationID с. Поэтому перед удалением из таблицы B вы можете обновить таблицу A:

UPDATE TableA
SET locationID = foundLocationID1
WHERE locationID = foundLocationID2

В качестве альтернативы, если у вас есть целая группа, которую вы собираетесь удалить сразу:

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