Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как удалить из таблицы повторяющиеся значения?  [new]
MLans
Member

Откуда:
Сообщений: 396
Есть таблица

ID Parent_id Name
0 1 Максим
1 1 Максимилиан
2 2 Сергей

как можно удалить из таблицы записи (оставив только одну), где повторяется Parent_Id?
Абсолютно все равно какая запись попадет в итоговую таблицу

0 1 Максим

или

1 1 Максимилиан

DISTINCT не работает т.к. имена разные.


СУВ.
27 авг 13, 14:19    [14760650]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить из таблицы повторяющиеся значения?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
MLans,

тут много идей
27 авг 13, 14:21    [14760668]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить из таблицы повторяющиеся значения?  [new]
iap
Member

Откуда: Москва
Сообщений: 47142
WITH CTE(N)AS(SELECT ROW_NUMBER()OVER(PARTITION BY Parent_id  ORDER BY ID)FROM [таблица])
DELETE CTE WHERE N>1;
27 авг 13, 15:26    [14761038]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить из таблицы повторяющиеся значения?  [new]
Empirical
Member

Откуда:
Сообщений: 99
MLans,

with tab as (
select max(id) as id from your_table group by Parent_Id having count(1) >= 1)
delete from your_table where id not in (select id from tab)
27 авг 13, 17:15    [14762122]     Ответить | Цитировать Сообщить модератору
 Re: Как удалить из таблицы повторяющиеся значения?  [new]
Empirical
Member

Откуда:
Сообщений: 99
iap
WITH CTE(N)AS(SELECT ROW_NUMBER()OVER(PARTITION BY Parent_id  ORDER BY ID)FROM [таблица])
DELETE CTE WHERE N>1;


Ваш планчик лучше:

RowsExecutesStmtTextStmtIdNodeIdParentPhysicalOpLogicalOpArgumentDefinedValuesEstimateRowsEstimateIOEstimateCPUAvgRowSizeTotalSubtreeCostOutputListWarningsTypeParallelEstimateExecutions
41WITH CTE(N)AS(SELECT ROW_NUMBER()OVER(PARTITION BY Parent_id ORDER BY ID)FROM #temp) DELETE CTE WHERE N>1;110NULLNULLNULLNULL3NULLNULLNULL0.02471491NULLNULLDELETE0NULL
41 |--Table Delete(OBJECT:([tempdb].[dbo].[#temp]))121Table DeleteDeleteOBJECT:([tempdb].[dbo].[#temp])NULL30.013.00E-0690.02471491NULLNULLPLAN_ROW01
41 |--Filter(WHERE:([Expr1004]>(1)))132FilterFilterWHERE:([Expr1004]>(1))NULL304.80E-06150.01471191[Bmk1000]NULLPLAN_ROW01
101 |--Sequence Project(DEFINE:([Expr1004]=row_number))143Sequence ProjectCompute ScalarDEFINE:([Expr1004]=row_number)[Expr1004]=row_number1008.00E-07230.01470711"[Bmk1000] [Expr1004]"NULLPLAN_ROW01
101 |--Segment154SegmentSegment[tempdb].[dbo].[#temp].[parent_id]NULL1002.00E-07230.01470631"[Bmk1000] [tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id] [Segment1009]"NULLPLAN_ROW01
101" |--Sort(ORDER BY:([tempdb].[dbo].[#temp].[parent_id] ASC [tempdb].[dbo].[#temp].[id] ASC))"165SortSort"ORDER BY:([tempdb].[dbo].[#temp].[parent_id] ASC [tempdb].[dbo].[#temp].[id] ASC)"NULL100.011261260.000151845230.01470611"[Bmk1000] [tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"NULLPLAN_ROW01
101 |--Table Scan(OBJECT:([tempdb].[dbo].[#temp]))176Table ScanTable ScanOBJECT:([tempdb].[dbo].[#temp])"[Bmk1000] [tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"100.0031250.000168230.003293"[Bmk1000] [tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"NULLPLAN_ROW01



RowsExecutesStmtTextStmtIdNodeIdParentPhysicalOpLogicalOpArgumentDefinedValuesEstimateRowsEstimateIOEstimateCPUAvgRowSizeTotalSubtreeCostOutputListWarningsTypeParallelEstimateExecutions
41with tab as ( select max(id) as id from #temp group by Parent_Id having count(1) >= 1) delete from #temp where id not in (select id from tab)110NULLNULLNULLNULL4.003326NULLNULLNULL0.05250101NULLNULLDELETE0NULL
41 |--Table Delete(OBJECT:([tempdb].[dbo].[#temp]))121Table DeleteDeleteOBJECT:([tempdb].[dbo].[#temp])NULL4.0033260.014.00E-0690.05250101NULLNULLPLAN_ROW01
41 |--Table Spool132Table SpoolEager SpoolNULLNULL4.0033260.0131250.000101541150.04249701[Bmk1000]NULLPLAN_ROW01
41" |--Nested Loops(Left Anti Semi Join WHERE:([tempdb].[dbo].[#temp].[id] IS NULL OR [Expr1009] IS NULL OR [tempdb].[dbo].[#temp].[id]=[Expr1009]))"143Nested LoopsLeft Anti Semi JoinWHERE:([tempdb].[dbo].[#temp].[id] IS NULL OR [Expr1009] IS NULL OR [tempdb].[dbo].[#temp].[id]=[Expr1009])NULL4.00332600.000200598150.02927047[Bmk1000]NULLPLAN_ROW01
101 |--Table Scan(OBJECT:([tempdb].[dbo].[#temp]))154Table ScanTable ScanOBJECT:([tempdb].[dbo].[#temp])"[Bmk1000] [tempdb].[dbo].[#temp].[id]"100.0031250.000168190.003293"[Bmk1000] [tempdb].[dbo].[#temp].[id]"NULLPLAN_ROW01
4510 |--Table Spool164Table SpoolLazy SpoolNULLNULL60.010.00010118110.02572888[Expr1009]NULLPLAN_ROW010
61 |--Filter(WHERE:([Expr1008]>=(1)))176FilterFilterWHERE:([Expr1008]>=(1))NULL602.88E-06110.01471798[Expr1009]NULLPLAN_ROW01
00" |--Compute Scalar(DEFINE:([Expr1008]=CONVERT_IMPLICIT(int[Expr1017]0)))"187Compute ScalarCompute Scalar"DEFINE:([Expr1008]=CONVERT_IMPLICIT(int[Expr1017]0))""[Expr1008]=CONVERT_IMPLICIT(int[Expr1017]0)"609.00E-06150.0147151"[Expr1008] [Expr1009]"NULLPLAN_ROW01
61" |--Stream Aggregate(GROUP BY:([tempdb].[dbo].[#temp].[parent_id]) DEFINE:([Expr1017]=Count(*) [Expr1009]=MAX([tempdb].[dbo].[#temp].[id])))"198Stream AggregateAggregateGROUP BY:([tempdb].[dbo].[#temp].[parent_id])"[Expr1017]=Count(*) [Expr1009]=MAX([tempdb].[dbo].[#temp].[id])"609.00E-06150.0147151"[Expr1009] [Expr1017]"NULLPLAN_ROW01
101 |--Sort(ORDER BY:([tempdb].[dbo].[#temp].[parent_id] ASC))1109SortSortORDER BY:([tempdb].[dbo].[#temp].[parent_id] ASC)NULL100.011261260.000151837150.0147061"[tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"NULLPLAN_ROW01
101 |--Table Scan(OBJECT:([tempdb].[dbo].[#temp]))11110Table ScanTable ScanOBJECT:([tempdb].[dbo].[#temp])"[tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"100.0031250.000168150.003293"[tempdb].[dbo].[#temp].[id] [tempdb].[dbo].[#temp].[parent_id]"NULLPLAN_ROW01


Ну, я ведь только учусь!
27 авг 13, 17:23    [14762179]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить