首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > VFP >

在表中找出重复的记录(这次与上次的有关问题不一样),

2012-03-29 
在表中找出重复的记录(这次与上次的问题不一样),在线等!比如一个表bhxmzjhm01李四13050319840404005302李

在表中找出重复的记录(这次与上次的问题不一样),在线等!
比如一个表
bh                 xm                   zjhm
01               李四             130503198404040053
02               李斯             130503840404005
03               王五             130502198306070011

从证件号码上可以看出01和02是一个人,所以需要把他跳出来。
我用了这个办法,代码如下  
select   syb.*;
    from   syb,syb   syb_a;
        where   left(trim(syb.zjhm),6)=left(trim(syb_a.zjhm),6);
      and   right(trim(left(syb.zjhm),17),9)=right(trim(left(syb_a.zjhm),17),9)
      and   syb.bh <> syb_a.bh
这个代码可以按照要求找出来,因为是自表连接,而且要求bh不能相等,所以在运行的时候就提示说,表之间没有联接,速度会特别慢。请问还有什么别的方法没有?

[解决办法]
将身分证变成15位的,再GROUP BY即可
[解决办法]
首先用create view 命令创建一个视图,然后对视图操作,具体见程序:
set talk off
close all
&&clear

&&创建数据库,由于视图依赖于数据库
create database xsgl_temp
open database xsgl_temp

&&创建原表
create table xs_temp (bh c(2),xm c(8), zjhm c(18))
insert into xs_temp values ( "01 ", "李四 ", "130503198404040053 ")
insert into xs_temp values ( "02 ", "李四 ", "130503840404005 ")
insert into xs_temp values ( "03 ", "王五 ", "130502198306070011 ")
? "原表 "
list

&&创建视图
create view temp1 as select bh,xm,zjhm,iif(len(alltrim(zjhm))=18,left(zjhm,6)+substr(alltrim(zjhm),9,9),alltrim(zjhm)) as zjhm_15 from xs_temp

&&生成15位的身份证表
select * from temp1 into table temp

&& 删除视图
drop view temp1

? "新的身份证表,15位身份证号,可以使用此表进行想要得操作,表名是temp.dbf(用后可以删除) "
use temp
list
close all

热点排行