我们有一个数据库,其中一个表的值是从另一个系统导入的.有一个自动递增列,没有重复的值,但缺少值.例如,运行此查询:

select count(id) from arrc_vouchers where id between 1 and 100

应该返回100,但它返回87.我可以运行任何查询来返回缺失数字的值吗?例如,可能存在id为1-70和83-100的记录,但没有id为71-82的记录.我想返回71、72、73等等.

这可能吗?

推荐答案

Update

在性能方面,MJS提供了much betteranswer.

The (not as fast as possible) answer

以下版本适用于任何大小的表格(不仅仅是100行):

SELECT (t1.id + 1) as gap_starts_at, 
       (SELECT MIN(t3.id) -1 FROM arrc_vouchers t3 WHERE t3.id > t1.id) as gap_ends_at
FROM arrc_vouchers t1
WHERE NOT EXISTS (SELECT t2.id FROM arrc_vouchers t2 WHERE t2.id = t1.id + 1)
HAVING gap_ends_at IS NOT NULL
  • gap_starts_at-当前间隙中的第一个id
  • gap_ends_at-当前间隙中的最后一个id

Mysql相关问答推荐

如何在逗号分隔字符串值中使用LEFT函数

如何跨多个产品查找相同时间范围的数据集

MySQL 8.0.33 Select json列时出现错误:排序内存不足,请考虑增加服务器排序缓冲区大小

如何确保 SQL 记录的列不引用它自己的主键?

try 在 .map 中使用 Favorite 选项卡进行react .我无法更改 mysql 表上的布尔类型

分别针对每个不同的列 Select 聚合

如何让连续 3 周或以上的用户有订单?

MySQL DISTINCT 日期仅返回特定表的 1 个值.相同的查询适用于其他表

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

如何显示患者预约中的专业人员姓名?

非常规字符的不正确字符串值错误

如何通过未知列中的唯一值有效地更新 MySQL 行

计算每个用户在第二个表中有多少条记录

查询以查找可用时隙

MySQL - 使一对值唯一

MySQL嵌套 Select 查询?

如何将 MySQL 5.7 更新到新的 MySQL 8.0?

在 MySQL Workbench EER 图中的多个列上创建唯一约束

PHP MySQLI 防止 SQL 注入

Mysql中int(10)的最大大小是多少