[英]remove duplicates from SQL table
我有一张桌子,看起来像
col1 col2 col3 x y 0.1 y x 0.1 y z 0.2 z y 0.2 .......
(x,y,0.1)等于(y,x,0.1),因此必须删除其中之一。
基本上,表格就像一个矩阵。 我需要摆脱矩阵对角线上方/下方的所有条目。 该表有1千万个条目=>结果将有5千万个条目。
好吧,如果您知道两个条目都存在,则可以执行以下操作:
delete from t
where col1 > col2;
如果其中一些可能已经丢失,而您想保留另一个,则:
delete from t
where col1 > col2 and
exists (select 1
from (select 1
from t t2
where t2.y = t.x and t2.x = t.y
)
)
“ double” select
是一种绕过MySQL限制的技巧,即您不能在delete
所使用的子查询中直接引用修改后的表。
编辑:
正如Ypercube所指出的,join子句也许更好:
delete t
from t join
t t2
on t2.y = t.x and t2.x = t.y and
t.y > t.x;
我实际上发现其中in
更容易理解。
尝试多表DELETE
。
语法不容易。 这样的事情(假设您的表名为tbl
):
DELETE tbl FROM tbl, tbl AS t2
WHERE tbl.col1 = t2.col2
AND tbl.col2 = t2.col1
AND tbl.col3 = t2.col3
AND tbl.col1 > tbl.col2
西尔万的解决方案应该起作用。 这是使用SubQ的替代方法。
delete from mytable where (col1,col2)in(sel col2,col1 from mytable where col1>col2);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.