以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  求助:将数据库里重复的行删掉  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=86807)

--  作者:fubblyc
--  发布时间:2016/6/26 22:14:00
--  求助:将数据库里重复的行删掉

导数据不小心导重了,数据库里有重复的,怎么才能把重复的删掉,同样的只剩下一条呢?数据量很大,十几万条记录


图片点击可在新窗口打开查看此主题相关图片如下:2.png
图片点击可在新窗口打开查看

--  作者:fubblyc
--  发布时间:2016/6/26 22:16:00
--  
比如 重复 的那一列 ,前面两行 就是 重复的,要只剩下一条。
--  作者:大红袍
--  发布时间:2016/6/27 0:20:00
--  

删除重复,参考

 

http://www.baidu.com/baidu?wd=sqlserver+%C9%BE%B3%FD%D6%D8%B8%B4&tn=monline_4_dg

 


--  作者:fubblyc
--  发布时间:2016/6/27 14:26:00
--  

谢谢大红袍老师。删除重复的我会了。那发了一个问题,不能把重复的全部删掉,要做判断。连续编号的不能删,不是同一个连续编号的才能删。


图片点击可在新窗口打开查看此主题相关图片如下:5.png
图片点击可在新窗口打开查看

 

[此贴子已经被作者于2016/6/27 14:26:28编辑过]

--  作者:fubblyc
--  发布时间:2016/6/27 14:29:00
--  

如上图,596482和 596483 的是连续编号,这两个是不能删。而  533332533333 也是连续编号,但是不是和596482 为一组的,说明是重复录进去的,才要删。

要么删596482 的这一组,要么删 533332 的这一组。


--  作者:fubblyc
--  发布时间:2016/6/27 14:34:00
--  

现在知道这样做:delet e from people where peopleId in (selec t peopleId from people group by peopleId having count(peopleId) > 1)

这是把所有重复的都删掉了。但是 596482和 596483 虽然是重复的,但是是连续编号,所以两个都要留着。只要 把 533332533333 删掉就行。不知道怎么加条件


--  作者:fubblyc
--  发布时间:2016/6/27 14:35:00
--  
一般连续编号不会超过10条。
--  作者:大红袍
--  发布时间:2016/6/27 15:08:00
--  

 那就要用代码处理。

 

Dim drs As List(Of DataRow) = DataTables("表A").Select("","第二列,第一列")
Dim pdr As DataRow= Nothing
Dim flag As Boolean = False
For Each dr As DataRow In drs
    If pdr IsNot Nothing
        If dr("第二列") <> pdr("第二列") Then
            flag = False
        Else
            If dr("第一列") <> pdr("第一列")+1 Then
                flag = True
            End  If
            If flag = True Then
                dr("_Sortkey") = -1
            End If
        End If
    End If
    pdr = dr
Next
DataTables("表a").deletefor("_Sortkey = -1")


--  作者:fubblyc
--  发布时间:2016/6/27 22:14:00
--  

 

[此贴子已经被作者于2016/6/27 22:17:21编辑过]

--  作者:fubblyc
--  发布时间:2016/6/27 22:32:00
--  

大红袍老师,我这样写:

Dim drs As List(Of DataRow) = DataTables("销售明细2").Selec t("","_Identify2,_Identify")
Dim pdr As DataRow= Nothing
Dim flag As Boolean = False
For Each dr As DataRow In drs
    If pdr IsNot Nothing
        If dr("_Identify2") <> pdr("_Identify2") Then
            flag = False
        Else
            If dr("_Identify") <> pdr("_Identify")+1 Then
                flag = True
            End  If
            If flag = True Then
                dr("_Sortkey") = -1
            End If
        End If
    End If
    pdr = dr
Next
DataTables("销售明细2").delet efor("_Sortkey = -1")
messagebox.show("1")

 

结果是这样:


图片点击可在新窗口打开查看此主题相关图片如下:6.png
图片点击可在新窗口打开查看

没有等于 -1 的。所以,也就没有删除任何东西