【问题标题】:How to find missing IDs in MySQL table [duplicate]如何在 MySQL 表中查找丢失的 ID [重复]
【发布时间】:2014-07-16 12:57:56
【问题描述】:

我有一个表,其中有一行 id 这是我的主键。这是一个有约 25 万行的表。通常,id 应该是一个序号。现在我想知道,数字序列中是否缺少一个数字。

示例:该表包含ids

1, 2, 4, 6, 7, 8, 9, 10

这意味着,在从110 的数字序列中,缺少数字35

如果 MySQL 查询只返回缺少的ids,会怎样?有没有办法增加一个计数器并比较 id 是否存在?

【问题讨论】:

  • 当然,只需将COUNT(*)MAX(id) 进行比较;这是假设您没有主-主复制。
  • @juergend 该表是一种 OLAP 表。所以我想知道缺少的ids 来检查是否所有的“父项”都在被分析。
  • @Jack 不会返回丢失的ids,但我喜欢这种方法。又好又容易!
  • 因此,您依靠 auto_increment 来提供参照完整性,而实际上并未使用外键,并且您依靠 auto_increment 是顺序的概念(提示:其目的不是顺序的)。 tl;dr - 根据定义,您的架构是错误的。
  • @N.B.你是对的:我的问题没有意义,因为原始项目不是连续的(因为项目可能已按原始顺序被删除)。谢谢你的提示。我已经在想为什么COUNT(*) <> MAX(id).

标签: mysql sequence counter


【解决方案1】:

使用 Linux 脚本将表 test(id:auto-increment) 填充到您的最大值 your_table。然后执行类似

select id from test where id not in (select id from your_table)

输出将是缺失的。

【讨论】:

  • 是的,这有帮助。不幸的是,它不是动态的;每次我的原始表格更改时,我都必须更新此帮助表格。
  • 我不确定这个说法:Select id+1 from your_table Where not EXISTS (select distinct id from your_table)
  • 这篇文章也可能对您有所帮助:stackoverflow.com/questions/4340793/…
猜你喜欢
  • 2011-07-28
  • 1970-01-01
  • 1970-01-01
  • 2012-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多