mysql - SQL 查询从表中检索下一个可用 ID

标签 mysql sql

我有一个表,其中包含一个名为 ticket_id 的列,它包含如下值:

ticket_id
STK0000000001
STK0000000002
STK0000000001
STK0000000003
STK0000000002
STK0000000001

ticket_id 值会在某些行中重复,因此它不是唯一的。

我正在使用此查询获取下一个可用 ID,但我无法使其正常工作。它始终返回 STK0000000002

感谢任何帮助!

SQL:

SELECT
    CONCAT('STK', LPAD(seq, 10, '0')) AS nextID
FROM
    (SELECT
        @seq:=@seq+1 AS seq,
        num
    FROM
        (SELECT
            CAST(SUBSTR(ticket_id, 4) AS UNSIGNED) AS num
        FROM
            sma_support_tickets
        UNION ALL
        SELECT
            MAX(CAST(SUBSTR(ticket_id, 4) AS UNSIGNED))+2 AS num
        FROM 
            sma_support_tickets
        ORDER BY
            num) AS ids
    CROSS JOIN 
        (SELECT @seq:=0) AS init 
    ) AS pairs
WHERE
    seq!=num
LIMIT 1

最佳答案

也许我在你的问题中遗漏了一些东西,但似乎应该这样做:

SELECT CONCAT('STK', 
              LPAD(MAX(SUBSTRING(ticket_id, 4)) + 1, 
                   10, 
                   '0')
             ) 
FROM sma_support_tickets;

关于mysql - SQL 查询从表中检索下一个可用 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24424971/

相关文章:

mysql - 尝试在 Mysql 中创建存储过程时出现语法错误?

sql - MS Access 2003 - 用于更新 SQL 查询的 VBA?

php - 通过单击字段名称使用来自 sql 查询的数据对 html 表进行排序

mysql - 将 IN 转换为 EXISTS 以统计进行过多种操作的用户

php - 如何使用 Laravel 从 MySQL 中的 '-'(连字符)分隔值获取数据?

MySQL:别名表不存在(复杂的子查询)

mysql - sql-query中有垃圾数据,但仍在执行,但不影响任何结果。为什么?

mysql - 如何在一个查询中对两个具有订单字段的相关表进行排序

mysql - as2,和“;在文本文件中停止读取文本

mySQL 唯一值