| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1088 人关注过本帖
标题:急!!求大神指教:如何找出同一个表中两个字符型字段相同的记录
只看楼主 加入收藏
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
两者对比,一次就可以了,不用你去比我----我也去比你。
2014-10-09 11:27
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
先解决你在顶楼的问题吧,后面的问题也就差不多自己能解答了。
一、分几步解决
 1、找出字段1的值出现在字段2的所有记录(相当于在同一个表文件中比较两个姓名字段)
    SELECT DISTINCT 姓名字段1 XM FROM 原表名 WHERE 姓名字段1 IN (SELECT DISTINCT 姓名字段2 FROM 原表名) INTO CURSOR TEMP
 2、打上标记
    UPDATE 原表名 SET 标记字段1=要打的标记符号(字符型) WHERE 姓名字段1 IN (SELECT XM FROM TEMP)
 3、删除临时表
    USE IN TEMP

二、一步解决,其实就是把上面的步骤合并(这也是复杂子查询生成的一种方法)
    UPDATE 原表名 SET 标记字段1=要打的标记符号(字符型) ;
       WHERE 姓名字段1 IN ;
          (SELECT XM FROM (SELECT DISTINCT 姓名字段1 XM ;
                              FROM 原表名 ;
                              WHERE 姓名字段1 IN ;
                                 (SELECT DISTINCT 姓名字段2 FROM 原表名)) T1)

因为上班忙,没空造数据表测试了,你就自己测试吧,有问题再跟帖问。


[ 本帖最后由 taifu945 于 2014-10-9 21:30 编辑 ]
2014-10-09 14:29
啸凡
Rank: 8Rank: 8
等 级:贵宾
威 望:45
帖 子:1356
专家分:885
注 册:2006-2-22
收藏
得分:0 
采用遍历记录的方式就可以了。不过,这些无用功,不知道楼主要来做什么,因为在实际工作中根本不会这么做。

两人行已有我师……
2014-10-09 17:02
HZ2J338
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-8
收藏
得分:0 
回复 12 楼 taifu945
谢谢大神,借用了程序显示出错,是什么原因呢?多谢指教!
原表名.zip (1 KB)
2014-10-09 20:35
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
SELECT 姓名字段1,姓名字段2,IIF(姓名字段1==姓名字段2,"√","") 标志 FROM 原表名

图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2014-10-09 21:22
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:15 
以下是引用HZ2J338在2014-10-9 20:35:16的发言:

谢谢大神,借用了程序显示出错,是什么原因呢?多谢指教!
经过对你给出的数据进行测试,应该用下列语句:

UPDATE 原表名 SET 标记="1重2" ;
   WHERE 姓名字段1 IN ;
      (SELECT DISTINCT T1.姓名字段1 ;
          FROM 原表名 T1,原表名 T2 ;
          WHERE T1.姓名字段1==T2.姓名字段2)

我觉得:

(1)你数据中有一条很具代表性:陈荻、陈荻文,这是两个人的名字,但前面的字又完全相同,我12楼的代码没有考虑周全。因为FoxPro的“IN”比较符类似于“$”和“=”的结合体,只要“IN”前面的字符串整体包含在“IN”后面的字符串中,且从第一个字符开始就包含,则认为比较的结果为真,也即,"陈荻" IN "陈荻文"=.T.。因此,产生的结果出现了错误:把姓名字段2中不存在的“陈荻”也作了标记。解决的办法是:用表文件的自联接功能,把姓名字段1和姓名字段2作完全比较(==比较),这样,"陈荻"和"陈荻文"就不会搅和在一起了。

(2)你在7楼说,需要的命令应该能处理如我6楼所言的那种情形。然而,你给出的数据却又是同一记录中左右相同内容的,我没看明白到底你想处理哪种情形。如果仅仅是处理同一记录左右相同内容的,那代码可按2楼或15楼所写的就能搞定。

(3)这条代码是在9.0版本测试成功的,如果你用的是以前的版本,不保证也能正确运行(但目测语法的约束,貌似可以在6.0及以上版本中运行)。
2014-10-09 22:22
HZ2J338
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2014-10-8
收藏
得分:0 
非常感谢大家,明天上班再测试下!
2014-10-09 22:34
快速回复:急!!求大神指教:如何找出同一个表中两个字符型字段相同的记录
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.038656 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved