在表中找出重复的记录(这次与上次的问题不一样),在线等!
比如一个表
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