以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  关于删除重复的多余行问题  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=186094)

--  作者:xnsiwei
--  发布时间:2023/4/6 9:47:00
--  关于删除重复的多余行问题
用来删除表中第二列 ,第三列都一样的重复多余行,只保留一行
问题是:
1.当第二列和第三列类型都为字符型时可以实现目的
2.当第二列或第三列为整数型时出错

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

请版主赐教

Dim idx As String = "-1,"
Dim idx_temp As String = ""
Dim pdr As DataRow = Nothing
Dim count As Integer = 0
Dim cs As String = "第二列,第三列"
For Each dr As DataRow In DataTables("dsjzl").Select("", cs)
    Dim flag As Boolean = False
    If pdr IsNot Nothing Then
        For Each c As String In cs.split(",")
            If pdr(c).replace(" ", "") <> dr(c).replace(" ", "") Then
                flag = True
                Exit For
            End If
        Next
        If flag Then
            If count > 1 Then
                idx &= idx_temp
            End If
            count = 1
            idx_temp = ""
        Else
            count += 1
            idx_temp &= dr("_Identify") & ","
        End If
    Else
        count += 1
    End If
    pdr = dr
Next
If count > 1 Then
    idx &= idx_temp
End If
 
Tables("dsjzl").Filter = "_Identify not In (" & idx.trim(",") & ")"
\'DataTables("dsjzl").DeleteFor("_Identify not In (" & idx.trim(",") & ")")

--  作者:有点蓝
--  发布时间:2023/4/6 10:07:00
--  
If pdr(c).replace(" ", "") <> dr(c).replace(" ", "") Then
改为
If pdr(c) <> dr(c) Then

--  作者:xnsiwei
--  发布时间:2023/4/6 10:25:00
--  
谢谢,问题解决!!!

另一个问题是,当表的行数达到20万行甚至更多时,用命令模式运行该代码会造成长时间无响应,还有更好的方法吗?


--  作者:有点蓝
--  发布时间:2023/4/6 10:36:00
--  
用sql

delete from 表A where  [_identify] not in (select id from (selec第二列,第三列,max([_identify]) as id from  表A group by 第二列,第三列) as a)

--  作者:xnsiwei
--  发布时间:2023/4/6 10:50:00
--  
不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。
--  作者:有点蓝
--  发布时间:2023/4/6 10:58:00
--  
把数据库里ntext类型改为nvarchar(max)