首页 > 解决方案 > 使用 SQL 过滤特定值,然后删除重复行

问题描述

假设我在访问数据库中有一个名为“ABC”的表,其设置如下:

Des Date Mid ... ISIN order 
 A.  B.   C. ...  D.    E
 F.  G.   H  ...  I.    J
 K.  L.      ...  N.    O
 P.  Q.      ...  S.    O
 L.  I.   U. ...  I.    P 

我需要先从“Mid”列中选择所有空单元格,然后如果“order”列值重复,则删除重复的行,只留下一条记录,以便“Mid”列中的所有空单元格没有重复值在“顺序”列中</p>

*我的表中没有主键也没有唯一标识符

我想要的结果:

 Des Date Mid ... ISIN order 
 A.  B.   C. ...  D.    E
 F.  G.   H  ...    I.    J
 K.  L.      ...    N.   O 
 L.  I.   U. ...     I.    P 

现在,在“Mid”列中选定的空单元格,“order”列中不再有重复值</p>

我的数据库太大了,只能模拟这个表做参考,这个推荐的SQL语句是什么?

标签: sqlms-accessduplicates

解决方案


假设您的一个或多个列是主键,您可以使用:

delete from t
   where t.Mid = "" and
         t.des > (select min(t2.des)
                  from t as t2
                  where t2.Mid = t.Mid and
                        t2.Order = t.Order
                 );

这任意假设这des是主键。


推荐阅读