2016-03-24 4 views
1

Я таблица SQL, которая сохраняет Locations,Выбор и удаление дублирующих строк для отдельных столбцов SQL

ID Name X  Y  Z 
------------------------- 
1 Loc1 12 24 45 
2 Loc2 12 24 60 
3 Loc3 54 32 33 
4 Loc4 54 32 64 
5 Loc5 98 66 90 
6 Loc6 98 66 77 
7 Loc7 44 50 98  

Некоторые координаты местоположения (х и у) дублируются по ошибке

Я хочу, чтобы выбрать и удалите один из них.

ID Name X  Y  Z 
------------------------- 
1 Loc1 12 24 45 
2 Loc3 54 32 33 
3 Loc5 98 66 90 
4 Loc7 44 50 98  

Возможно ли это с запросом sql?

+0

Какие СУБД вы используете, MySQL или SQL Server? –

+0

С какой из них вы хотите избавиться? Например, Loc1 и Loc2 имеют одинаковые значения для X и Y. Почему Loc1 не поддерживается и Loc2 не поддерживается? –

+0

Используйте раздел roumberumber на X для этого ... и удалите, где rownum больше 1, после этого идет с обычным номером для обновления. Имя – Veljko89

ответ

1

Я думаю, вы можете использовать команду alter-table и просто удалить весь столбец.

ALTER TABLE table_name 
DROP COLUMN column_name 
+0

Зачем бросать колонку? – TheGameiswar

1
with cte 
as 
(
select *,row_number() over (partition by x,y order by x) as rn 
) 
delete from cte where rn>1 

Как видно отмечено в комментариях, это удаляет случайную строку (undeterministic), чтобы сделать его детерминированным заказ по имени в случае

0

Для MySQL вы можете использовать:

DELETE mytable 
FROM mytable 
JOIN (SELECT MIN(ID) AS ID, X, Y 
     FROM mytable 
     GROUP BY X, Y 
) AS t ON mytable.X = t.X AND mytable.Y = t.Y AND mytable.ID > t.ID 

Demo here

0

Его легко:

Добавить INDEX за 2 колонки с Ignore:

ALTER IGNORE TABLE YOUR_TABLE 
ADD KEY (X,Y); 

Это все

Смежные вопросы