2016-12-05 10 views
0

У меня есть 2 таблицы таблица 1: команды с колонкой TeamID, teamName, который имеет некоторые дубликаты какзаменяя повторяющиеся строки в таблице и в таблицах, имеющих внешний ключ ссылку на 1-й таблицу

Table 1 TeamID | TeamName 
------------------------------------- 
       1  | abc 
       2  | abc 

таблица 2: UsedTeams с колонкой ID, RequestID, teamdID (иностранные основные команды (TeamID))

Table 2 
ID |Requestid | teamID 
---|-----------|-------- 
1 | 1000  | 1 
2 | 1001  | 2 

то, что я хочу, чтобы удалить повторяющиеся команды из таблицы команд, как удаление команды с TeamID 2, а также в какой строке в отработанном команде имеет TeamID равна до 2 штук пакетирования обновляется до TeamID 1.

+1

Подсказка сегодня: уникальные ограничения! – jarlh

ответ

1

КТР и OVER -clause помогает упростить задачу:

WITH CTE AS 
(
    SELECT t.*, 
      RN = ROW_NUMBER() OVER (PARTITION BY TeamName ORDER BY TeamId), 
      MinTeamId = MIN(TeamId) OVER (PARTITION BY TeamName) 
    FROM Teams t 
) 
UPDATE ut SET ut.TeamId = CTE.MinTeamId 
FROM CTE INNER JOIN UsedTeams ut ON CTE.TeamId = ut.TeamId 
WHERE CTE.RN > 1