如何在充满数字的列中找到未使用的数字。
表_A:
'id' int(11) unsigned NOT NULL AUTO_INCREMENT,
'client_code' int(4) unsigned NOT NULL,
'client_name' varchar(50) NOT NULL,
PRIMARY KEY ('id')
INSERT INTO Table_A ('client_code','client_name') VALUES (1,'Bob');
INSERT INTO Table_A ('client_code','client_name') VALUES (2,'Anna');
INSERT INTO Table_A ('client_code','client_name') VALUES (5,'Jim');
INSERT INTO Table_A ('client_code','client_name') VALUES (6,'Tom');
INSERT INTO Table_A ('client_code','client_name') VALUES (10,'Mattew');
如果我SELECT 'client_code' FROM Table_A
输出将是1,2,5,6,10
. 我怎样才能拥有未使用的号码?
(3,4,7,8,9,11,12...)
要查看缺少的内容,您可以与完整列表进行比较。MySQL
中没有行生成器(如
generate_series()
Postgres 中),但各种代理项都在浮动。就像 MySQL 论坛中的这个。帮助表提供来自
0-9
:在此基础上,生成完整的数字范围:
现在您可以完全按照要求生成缺失号码列表:
关键元素是
LEFT JOIN
和聚合函数GROUP_CONCAT()
。要获得包括缺失代码在内的完整代码/名称列表,这可能是您的最终目标:
-> SQLfiddle 演示。
创建一个存储过程如下
根据需要调用参数。(只是尝试 11 )
我得到了以下结果
样品小提琴
您可以通过为 and 中的所有行生成的“rownumber”之间的差异来获得
Table_A
它client_code
:您的
client_code
值必须从 1 开始并以 1 递增。