如何在两表中查询类同的数据

时间:2021-05-11 02:54:07
如TAB1内里有这样的数据
姓名    性别        身份证号  
张三     男        451521197901151161
李四     男        450231198008213316
王五     男        430231198106213321
。。。。。。。。。。。。。。。。。。。

TAB2里有数据如下:
张三     男        451521197902151161
李四     男        450231198005213316
王六     男        430231198106213321
。。。。。。。。。。。。。。。。。。。

说明:TAB1为2003年数据,TAB2为2004年数据,因在报名时填错身份证号或姓名而难以找到两年内同一个人的报名数据,请求各位高手帮忙解决,谢谢。
如无法以姓名和身份证号类同来查找,也可以单单以身份证号类同来查找出类同的数据。

22 个解决方案

#1


select *
from tab1
join tab2 on tab1.[身份证号]=tab2.[身份证号]

#2


不是很明白你的意思:
你试试
select a.*,b.身份证号 from TAB1 a,TAB2 b where a.姓名=b.姓名 and b.性别=a.性别
and a.身份证号<>b.身份证号
应该可以查处添错了身份正号的。

#3


select * from A.姓名,A.身份证号,B.姓名,B.身份证号 from TAB1 A,TAB2 B where A.姓名+A.身份证号=B.姓名,B.身份证号

#4


请问楼主, 会不会出现同一个人的姓名和身份证号同时填写错误的情形呢? 
我想要是存在这样情况的话  就无从解决该问题!

#5


谢谢各位,应该不会出现姓名和身份证号同时写错的情形。

#6


有没有更好的办法?

#7



select * from tab2 where 身份证号 in select 身份证号 from tab1
union
select * from tab2 where 姓名 in select 姓名 from tab1

或者
select distinct * from (
select * from tab2 where 身份证号 in select 身份证号 from tab1
union
select * from tab2 where 姓名 in select 姓名 from tab1
) as result

#8


/*
分别从一个表查询是否存在另外一个表,名字和身份证号码相等的,没有匹配的就是名字或者身份证填错,select出来
*/
select * from Tab1 T1 where NOT EXISTS
(SELECT 姓名 FROM Tab2 T2 WHERE T1.姓名 = T2.姓名
AND T1.身份证号 = T2.身份证号)
UNION 
select * from Tab2 T2 where NOT EXISTS
(SELECT 姓名 FROM Tab1 T1 WHERE T1.姓名 = T2.姓名
AND T1.身份证号 = T2.身份证号)

#9


我试试看

#10


试了,不行,有没有更好的方法?谢谢了

#11


请各位高手帮帮我想想办法吧,谢谢了

#12


select * from tb1 where 身份证号 IN (SELECT 身份证号 FORM TB2)

#13


不好意思,我少加过来了
select * from tab2 where 身份证号 in (select 身份证号 from tab1)
union
select * from tab2 where 姓名 in (select 姓名 from tab1)

或者
select distinct * from (
select * from tab2 where 身份证号 in (select 身份证号 from tab1)
union
select * from tab2 where 姓名 in (select 姓名 from tab1)
) as result

#14


---可以查到名字相同,身份证不同的记录,我测试过的~
--建立测试环境:
create table tab1 (name varchar(8),sex varchar(2),sfzh varchar(20))

insert tab1 select '张三','男','451521197901151161' 
union all select '李四','男','450231198008213316'
union all select '王五','男','430231198106213321'

create table tab2 (name varchar(8),sex varchar(2),sfzh varchar(20))

insert tab2 select '张三','男','451521197902151161' 
union all select '李四','男','450231198005213316'
union all select '王五','男','430231198106213321'


select a.name ,b.sex,a.sfzh,b.sfzh from tab1 a  join  tab2  b on a.name=b.name and 
a.sfzh!=b.sfzh

#15


zhxudong(zhxudong) 你好,你的方法我已经测试,不错。但只显示TAB2的类同记录,如何做到两表的类同记录一起显示出来呢?如:查询出来的记录左边是TAB1的记录右边是TAB2的类同记录,记核对的人一目了然,知道是哪里录错了。请再帮我想想办法,谢谢!

#16


希望懂做的朋友帮帮我,谢谢。

#17


有没有具体点的方法?小弟多谢了`

#18


请自行参照:http://community.csdn.net/Expert/topic/4180/4180724.xml?temp=.2797205
http://community.csdn.net/Expert/topic/4172/4172081.xml?temp=8.984011E-02

#19


因在录入数据时有可能身份证号会录错一两个数字,如:在自考数据库里每个考生一年中参加几次自考,而每次都要报名,故存在着几个表里有同一个人的数据在里面,有个别表里因录入时的大意,错录了考生身份证号或姓名,所以我想通过在几个表中找类同数据的方法把同一个人且身份证号或姓名不同的记录(即类同数据),希望大家提供最好的方法,谢谢。

#20


?

#21


楼主首先要确定以那个表为标准,以什么为关联字段!

#22


查询类同的数据也要以那个表为准吗?只要查出两个表之间类同的数据就行了。字段可以以身份证号和姓名,或单方面以身份证号为两表间可能有类同的字段。谢谢你们的帮助!

#1


select *
from tab1
join tab2 on tab1.[身份证号]=tab2.[身份证号]

#2


不是很明白你的意思:
你试试
select a.*,b.身份证号 from TAB1 a,TAB2 b where a.姓名=b.姓名 and b.性别=a.性别
and a.身份证号<>b.身份证号
应该可以查处添错了身份正号的。

#3


select * from A.姓名,A.身份证号,B.姓名,B.身份证号 from TAB1 A,TAB2 B where A.姓名+A.身份证号=B.姓名,B.身份证号

#4


请问楼主, 会不会出现同一个人的姓名和身份证号同时填写错误的情形呢? 
我想要是存在这样情况的话  就无从解决该问题!

#5


谢谢各位,应该不会出现姓名和身份证号同时写错的情形。

#6


有没有更好的办法?

#7



select * from tab2 where 身份证号 in select 身份证号 from tab1
union
select * from tab2 where 姓名 in select 姓名 from tab1

或者
select distinct * from (
select * from tab2 where 身份证号 in select 身份证号 from tab1
union
select * from tab2 where 姓名 in select 姓名 from tab1
) as result

#8


/*
分别从一个表查询是否存在另外一个表,名字和身份证号码相等的,没有匹配的就是名字或者身份证填错,select出来
*/
select * from Tab1 T1 where NOT EXISTS
(SELECT 姓名 FROM Tab2 T2 WHERE T1.姓名 = T2.姓名
AND T1.身份证号 = T2.身份证号)
UNION 
select * from Tab2 T2 where NOT EXISTS
(SELECT 姓名 FROM Tab1 T1 WHERE T1.姓名 = T2.姓名
AND T1.身份证号 = T2.身份证号)

#9


我试试看

#10


试了,不行,有没有更好的方法?谢谢了

#11


请各位高手帮帮我想想办法吧,谢谢了

#12


select * from tb1 where 身份证号 IN (SELECT 身份证号 FORM TB2)

#13


不好意思,我少加过来了
select * from tab2 where 身份证号 in (select 身份证号 from tab1)
union
select * from tab2 where 姓名 in (select 姓名 from tab1)

或者
select distinct * from (
select * from tab2 where 身份证号 in (select 身份证号 from tab1)
union
select * from tab2 where 姓名 in (select 姓名 from tab1)
) as result

#14


---可以查到名字相同,身份证不同的记录,我测试过的~
--建立测试环境:
create table tab1 (name varchar(8),sex varchar(2),sfzh varchar(20))

insert tab1 select '张三','男','451521197901151161' 
union all select '李四','男','450231198008213316'
union all select '王五','男','430231198106213321'

create table tab2 (name varchar(8),sex varchar(2),sfzh varchar(20))

insert tab2 select '张三','男','451521197902151161' 
union all select '李四','男','450231198005213316'
union all select '王五','男','430231198106213321'


select a.name ,b.sex,a.sfzh,b.sfzh from tab1 a  join  tab2  b on a.name=b.name and 
a.sfzh!=b.sfzh

#15


zhxudong(zhxudong) 你好,你的方法我已经测试,不错。但只显示TAB2的类同记录,如何做到两表的类同记录一起显示出来呢?如:查询出来的记录左边是TAB1的记录右边是TAB2的类同记录,记核对的人一目了然,知道是哪里录错了。请再帮我想想办法,谢谢!

#16


希望懂做的朋友帮帮我,谢谢。

#17


有没有具体点的方法?小弟多谢了`

#18


请自行参照:http://community.csdn.net/Expert/topic/4180/4180724.xml?temp=.2797205
http://community.csdn.net/Expert/topic/4172/4172081.xml?temp=8.984011E-02

#19


因在录入数据时有可能身份证号会录错一两个数字,如:在自考数据库里每个考生一年中参加几次自考,而每次都要报名,故存在着几个表里有同一个人的数据在里面,有个别表里因录入时的大意,错录了考生身份证号或姓名,所以我想通过在几个表中找类同数据的方法把同一个人且身份证号或姓名不同的记录(即类同数据),希望大家提供最好的方法,谢谢。

#20


?

#21


楼主首先要确定以那个表为标准,以什么为关联字段!

#22


查询类同的数据也要以那个表为准吗?只要查出两个表之间类同的数据就行了。字段可以以身份证号和姓名,或单方面以身份证号为两表间可能有类同的字段。谢谢你们的帮助!