繁体   English   中英

从SQL表中删除重复项

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM