Foxtable(狐表)用户栏目专家坐堂 → 关于删除重复的多余行问题


  共有1776人关注过本帖树形打印复制链接

主题:关于删除重复的多余行问题

帅哥哟,离线,有人找我吗?
xnsiwei
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3211 威望:0 精华:0 注册:2019/11/3 22:21:00
关于删除重复的多余行问题  发帖心情 Post By: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(",") & ")")

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/4/6 10:07:00 [只看该作者]

If pdr(c).replace(" ", "") <> dr(c).replace(" ", "") Then
改为
If pdr(c) <> dr(c) Then

 回到顶部
帅哥哟,离线,有人找我吗?
xnsiwei
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3211 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2023/4/6 10:25:00 [只看该作者]

谢谢,问题解决!!!

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


 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:454 积分:3211 威望:0 精华:0 注册:2019/11/3 22:21:00
  发帖心情 Post By:2023/4/6 10:50:00 [只看该作者]

不能比较或排序 text、ntext 和 image 数据类型,除非使用 IS NULL 或 LIKE 运算符。

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:107135 积分:544918 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2023/4/6 10:58:00 [只看该作者]

把数据库里ntext类型改为nvarchar(max)

 回到顶部