Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查找下一个可用字符串键_Mysql_Key - Fatal编程技术网

Mysql 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

我需要在具有字符串键的表上查找下一个可用ID。我的例子如下:

菜品表(第一列)

SQL:

输出:

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