首页 > 解决方案 > MySQL在(唯一的)非连续整数字段中查找丢失的数字

问题描述

我有一列介于 30 和 999 之间的非连续唯一整数。

我需要提供一个包含可用数字的下拉列表。

我可以使用这个论坛上的一些解决方案,但它们都适用于序列号字段。

我也可以使用我的应用程序中的代码来处理这个,但这要慢得多。我相信让数据库引擎做尽可能多的工作。

有没有办法在处理之前对表字段进行排序(即创建一个顺序列表)?

标签: mysql

解决方案


做到这一点的一个好方法是在 MySQL 数据库中简单地维护一个从 30 到 999 的值序列。然后,您可以按如下方式左连接以生成可用号码列表:

SELECT t1.id
FROM
(
    SELECT 30 AS id UNION ALL      -- replace this inline table
    SELECT 31 UNION ALL            -- with a formal sequence table
    ...
    SELECT 998 UNION ALL
    SELECT 999
) t1
LEFT JOIN yourTable t2
    ON t2.id = t1.id
WHERE
    t2.id IS NULL;

t1您可以用数据库中的正式序列表替换上述别名的内联子查询。


推荐阅读