Mysql SQL查找下一个可用字符串键
我需要在具有字符串键的表上查找下一个可用ID。我的例子如下: 菜品表(第一列) SQL: 输出:Mysql SQL查找下一个可用字符串键,mysql,key,Mysql,Key,我需要在具有字符串键的表上查找下一个可用ID。我的例子如下: 菜品表(第一列) SQL: 输出: DSH0000000006 如果我删除了#5,那么它会返回#5,但不会返回“DSH0000000001”。您应该添加对起始值的测试。使用当前方法,只能获得大于表中存在的最小值的值 您可以使用IF()来区分这两种可能性。您可以使用变量来构建连续的id,然后比较第一个不匹配的id: SELECT CONCAT('DSH', LPAD(seq, 10, '0')) AS k FROM (SELE
DSH0000000006
如果我删除了#5,那么它会返回#5,但不会返回“DSH0000000001”。您应该添加对起始值的测试。使用当前方法,只能获得大于表中存在的最小值的值
您可以使用IF()来区分这两种可能性。您可以使用变量来构建连续的id,然后比较第一个不匹配的id:
SELECT
CONCAT('DSH', LPAD(seq, 10, '0')) AS k
FROM
(SELECT
@seq:=@seq+1 AS seq,
num
FROM
(SELECT
CAST(SUBSTR(table_id, 4) AS UNSIGNED) AS num
FROM
t
UNION ALL
SELECT
MAX(CAST(SUBSTR(table_id, 4) AS UNSIGNED))+2 AS num
FROM
t
ORDER BY
num) AS ids
CROSS JOIN
(SELECT @seq:=0) AS init
) AS pairs
WHERE
seq!=num
LIMIT 1
Fiddle可用。Hi-VMai,感谢您的回复,但您如何在查询中检查起始值?谢谢,如果ID列表(即最高ID号)中没有空白,那么您的查询似乎不会返回下一个ID。请参见此处的SQLFiddle()。“恐怕你的SQL超出了我的知识范围。”我注意到了这一点。几乎不需要修理。我已经更新了Hanks Alma Do!真棒的帮助!
DSH0000000006
SELECT
CONCAT('DSH', LPAD(seq, 10, '0')) AS k
FROM
(SELECT
@seq:=@seq+1 AS seq,
num
FROM
(SELECT
CAST(SUBSTR(table_id, 4) AS UNSIGNED) AS num
FROM
t
UNION ALL
SELECT
MAX(CAST(SUBSTR(table_id, 4) AS UNSIGNED))+2 AS num
FROM
t
ORDER BY
num) AS ids
CROSS JOIN
(SELECT @seq:=0) AS init
) AS pairs
WHERE
seq!=num
LIMIT 1