mysql - MySQL在(唯一的)非连续整数字段中查找丢失的数字
问题描述
我有一列介于 30 和 999 之间的非连续唯一整数。
我需要提供一个包含可用数字的下拉列表。
我可以使用这个论坛上的一些解决方案,但它们都适用于序列号字段。
我也可以使用我的应用程序中的代码来处理这个,但这要慢得多。我相信让数据库引擎做尽可能多的工作。
有没有办法在处理之前对表字段进行排序(即创建一个顺序列表)?
解决方案
做到这一点的一个好方法是在 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
您可以用数据库中的正式序列表替换上述别名的内联子查询。
推荐阅读
- excel - 在 Excel 中更新主工作表上的值
- entity-framework - 在 docker 内运行的 .net 3.1 应用程序无法连接 SQL 服务器
- c# - 文件不上传Windows表单C#
- node.js - $ 或聚合在 nodejs 中不工作但在 mongoshell 中工作
- javascript - 从 jquery 中的字符串调用函数,但传递的参数未正确显示
- c++ - 具有传递依赖的 findFoo.cmake
- c++ - 这是 GoogleTest AssertionResult 中的错误吗?
- file-upload - swagger-annotations @Schema 不提供定义属性的方法
- json - 如果列名包含 APOSTROPHE('s),则无法在 SQLSERVER 中插入 JSON 数据
- html - 使用填充而不是使用 CSS 的边距居中(没有额外的包装 DIV)