身份证查重问题

用的是mysql,不知道哪里出了问题

image.png

image.png


select * from member_info a where a.id_number in ( 

select b.id_number from member_info b 

group by b.id_number  having  count(b.id_number)>1

);


FineReport 良月二三 发布于 2020-12-8 10:18 (编辑于 2020-12-8 10:39)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
朝赟丶Lv6初级互助
发布于2020-12-8 10:21(编辑于 2020-12-8 14:59)

sql语句要优化,这么写的只有新手吧,

写个with()临时表

然后下面join一下,你试试也是秒查

with tb1 as
 (select b.id_number
    from member_info b
   group by b.id_number
  having count(b.id_number) > 1)
select * 
from member_info a
join tb1 b on a.id_number = b.id_number

------分割线-------

select *
  from (select b.*, count(b.id_number) idnum
          from member_info b
         group by 此处放上b表所有的字段)
 where idnum > 1

------分割线2-------

select *
  from member_info a
  join (select *
          from (select b.id_number, count(1) idnum
                  from member_info b
                 group by b.id_number)
         where idnum > 1) b
    on b.id_number = a.id_number


  • 良月二三 良月二三(提问者) 小白实锤了,语句我放上来了,可以帮忙写一下嘛,with这个语法没用过,刚刚试了几次,都报错,版本是mysql11,应该没啥问题。
    2020-12-08 10:42 
  • 朝赟丶 朝赟丶 回复 良月二三(提问者) mysql可能不支持with子句,另一个方案:直接子查询嵌套也。没关系,我都放出来参照下吧
    2020-12-08 10:59 
  • 朝赟丶 朝赟丶 回复 良月二三(提问者) with子句如果用表的唯一索引去关联会更好,不清楚你的表结构
    2020-12-08 11:03 
  • 良月二三 良月二三(提问者) 回复 朝赟丶 大佬,with好像确实不行,第一个提示错误,第二个的方向对了,但是不适用我这个需求,因为我是想展示所有身份证重复的数据,比如一个身份证号重复两条,两条数据都查询出来看一下其他字段数据,其他数据很多不同,用您这个方法如果group by了其他的字段,那么身份证就不是唯一了,身份证重复但其他字段不同那个count是两条数据1,而不是一条数据2了,心态快炸了
    2020-12-08 11:28 
  • 朝赟丶 朝赟丶 回复 良月二三(提问者) 等下我再发你个
    2020-12-08 14:54 
最佳回答
0
张洪威Lv6高级互助
发布于2020-12-8 10:31(编辑于 2020-12-8 10:32)

~~~

最佳回答
0
shirokoLv6资深互助
发布于2020-12-8 10:33(编辑于 2020-12-8 10:50)

没问题呀,我觉得你最后加一个 order by a.id_number 看看吧。。

-

select * from member_info a where a.id_number in ( 

select b.id_number from member_info b 

group by b.id_number  having  count(b.id_number)>1

) order by a.id_number ;

其实没有改动,只是容易看出来是否成功

  • 良月二三 良月二三(提问者) 谁不说呢,搞半天了,order by不行,刚刚我都试了一下在in 里面只放一个数据都不行,看起来像是语法问题,但这种没错啊
    2020-12-08 10:43 
  • 良月二三 良月二三(提问者) 试了一下,不行,是in()那里出了问题, select * from fcvem.member_info a where a.id_number in ( select b.id_number from fcvem.member_info b WHERE b.id_number=\'340104198202031522\' ) 我刚刚试了一下这样都不行,就后面一个值,我丢 select * from fcvem.member_info a where a.id_number in ( \'340104198202031522\' ) 这样就可以,但是上面的语句in里面也是只有这一个数据,崩溃了
    2020-12-08 10:57 
  • 良月二三 良月二三(提问者) 后面的语句里面没有斜杠,格式问题
    2020-12-08 10:59 
最佳回答
0
AmyQLv6初级互助
发布于2020-12-8 15:13(编辑于 2020-12-8 15:14)

id_number加个索引,没有走索引,全表查询的

  • 良月二三 良月二三(提问者) 加过了,之前23秒,加了索引变57秒了。。。。,可能身份证列不适合做索引
    2020-12-08 15:46 
  • 5关注人数
  • 591浏览人数
  • 最后回答于:2020-12-8 15:14
    请选择关闭问题的原因
    确定 取消
    返回顶部