У меня есть таблица с повторяющимися кодами, мне нужно очистить таблицу, удаляя повторяющуюся, но имеющую по крайней мере один слева от нее в таблице.Удалить повторяющиеся идентификаторы из таблицы - Улучшение производительности
Моя таблица такова:
FriendlyFunctionCode MemberFirmId FunctionLevel3Desc
1 Value1 Value2
1 Value2 Value3
2 Value4 Value5
мне нужно что-то вроде этого: (Это не имеет значения, какая строка остается, только, чтобы иметь по крайней мере один)
FriendlyFunctionCode MemberFirmId FunctionLevel3Desc
1 Value1 Value2
2 Value4 Value5
У меня есть это запрос, но производительность ужасная
SELECT MemberFirmId, FriendlyFunctionCode
INTO #ToDeleteRepeated
FROM [dbo].[FirmFunction]
GROUP BY MemberFirmId, FriendlyFunctionCode
HAVING COUNT(1) > 1
DECLARE @Code VARCHAR(100), @Desc VARCHAR(250)
WHILE ((SELECT COUNT(1) FROM #ToDeleteRepeated) > 0)
BEGIN
SELECT TOP 1 @Code = FriendlyFunctionCode FROM #ToDeleteRepeated
WHILE ((SELECT COUNT(1) FROM [FirmFunction] WHERE FriendlyFunctionCode = @Code) > 0)
BEGIN
SELECT TOP 1 @Desc = FunctionLevel3Desc FROM [FirmFunction] WHERE FriendlyFunctionCode = @Code
DELETE FROM [FirmFunction] WHERE FriendlyFunctionCode = @Code AND FunctionLevel3Desc = @Desc
END
END
Любые предложения?
первым вы заботитесь, какая запись вы сохранить или удалить, если они имеют разные значения, относящиеся к FriendlyFunctionCode? Ваш запрос предполагает, что вы этого не делаете. Фактически, только для того, чтобы отметить, что ваш запрос будет удалять несколько записей, если FunctionLevel3Desc также повторяется. – Matt