小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
  • <strong>常见mysql数据库命令</strong>

    常见mysql数据库命令

    update更新//替换phome_ecms_soft的onclick字段数值为857-3857之间,切只有id在1916到1980之间的数据执行update phome_ecms_soft SET onclick=FLOOR(857 + (RAND() * 3000)……
    187人已经看过了
  • 删除命令,清空数据库表的三种方式

    删除命令,清空数据库表的三种方式

    数据表的清空有三种方式: delete------ 是逐行删除速度极慢,不适合大量数据删除。 删除整张表数据:delete from table_name;删除部分表数据:Delete from table_name where 1=1……
    242人已经看过了
您的位置:首页 > 后端编程 > 数据库 > 数据库命令

用sql语句查找表中缺失或不存在的id

分类: 数据库命令58个赞

碰到了一个sql语句问题,比如网站一共发布了50000条数据,中间有些数据已经删除,现在需要找到删除的数据的id,也就是缺失的id


方法一:

只缺少一条记录或缺失的记录不连续时

原理:将数据通过ID进行两两分组,分组规则 ID除以2 取整,整数一样的分为一组,如果该组的记录数量少于2,则表示缺1条记录,根据该条记录的ID与2求余,计算出缺失的ID数。


SELECT
CASE
WHEN id MOD 2 = 0 THEN id - 1
ELSE   id +1
END AS '缺失ID'
FROM    phome_ecms_info_index
GROUP BY CEIL(id/2)    
HAVING COUNT(*) < 2;


缺点:缺点就是缺失的记录不能是连续的,如果是连续的记录缺失,用下面的语句则会出现查询缺失记录丢失的情况。


方法二:

二、缺少少量数据时

原理:先用最大的ID号减去总的记录条数,获取缺失的记录条数,按“缺失的记录条数+1”,作为分组大小CNT,如果当前组的数量小于CNT,那么则显示以下信息:


1、当前段起始编号


2、当前段结束编号


3、每段总个数


4、当前段缺失ID个数


5、当前段拥有的编号


缺点:不能直接得出缺失的ID号,需要肉眼观察,建议在缺失量小于10的时候使用。

SELECT
 CEIL(id / X.cnt) * X.cnt - X.cnt + 1 AS '当前段起始编号',
 (CEIL(id / X.cnt)) * X.cnt AS '当前段结束编号',
 X.cnt AS '每段总个数',
 X.cnt - COUNT(*) AS '当前段缺失ID个数',
 GROUP_CONCAT(DISTINCT id ORDER BY id ASC SEPARATOR "," ) AS '当前段拥有编号'
FROM table1
JOIN (SELECT max(id) - COUNT(*) + 1 AS cnt FROM table1) AS X
GROUP BY CEILING(id/ X.cnt)
HAVING  COUNT(*) < (SELECT max(id) - COUNT(*) + 1 AS cnt FROM table1 );

如图所示,红色部分为缺少的编号。

image.png

如果缺失太多,就会这么显示

image.png

小米技术社区

本站内容均为小米原创,转载请注明出处:小米技术社区>> 用sql语句查找表中缺失或不存在的id