选择和删除特定列SQL的重复行

时间:2016-03-24 13:28:06

标签: mysql sql sql-server

我有一个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    

某些位置坐标(x和y)错误重复

我想选择并删除其中一个。

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查询吗?

4 个答案:

答案 0 :(得分:1)

我认为您可以使用alter-table命令并删除整个列。

ALTER TABLE table_name
DROP COLUMN column_name

答案 1 :(得分:1)

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

正如在评论中指出的那样,这会删除一个随机行(不确定性),以便在您的案例中按名称确定其顺序

答案 2 :(得分: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

答案 3 :(得分:0)

很容易:

使用IGNORE在2列上添加INDEX:

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

多数人