MySQL存储过程如何生成新的auto_increment?

标签 mysql stored-procedures mariadb

我在 MySQL 上有一个这样的程序

SELECT t.name AS cat_name , f.id AS id_food 
FROM food AS f, categories AS t
WHERE f.quantity > 0 
AND t.id = f.id_cat 
ORDER BY t.name

当我执行时它会显示一个表格

| cat_name | id_food |
| -------- | -------------|
| Seafood  | 1            |
| Seafood  | 3            |
| Seafood  | 5            |
| Beef     | 2            |
| Beef     | 16           |
| Special  | 7            |

想知道是否有什么东西可以使该表在其前面生成一个新的auto_increment id 字段

这就是我希望执行时的样子

| new_id  | cat_name | id_food |
|----     |------    | -----   |
| 1       | Seafood  | 1       |
| 2       | Seafood  | 3       |
| 3       | Seafood  | 5       |
| 4       | Beef     | 2       |
| 5       | Beef     | 16      |
| 6       | Special  | 7       |

最佳答案

如果你的 MySQL 版本支持 ROW_NUMBER + 窗口函数,你可以尝试这个。

SELECT ROW_NUMBER() OVER(ORDER BY t.name)new_id
       t.name AS cat_name ,
       f.id AS id_food 
FROM food AS f 
INNER JOIN categories AS t 
ON t.id = f.id_cat
WHERE f.quantity > 0 
ORDER BY t.name

关于MySQL存储过程如何生成新的auto_increment?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70543545/

相关文章:

mysql - 如何在 MySQL 中获取记录数以及最小值/最大值?

mysql 不想要变量分配后的结果

sql-server - 从 SQL Server 存储过程执行 Oracle 存储过程

mysql - 无法在 Debian 7 (Wheezy) 上安装 mySQL/maridDB

python - Spark DataFrameWriter 使用 TIMESTAMP 而不是 DATETIME

mysql - 根据日期查询mysql

mysql - 从树类型表中获取所有信息

mysql - 在选择中选择查询

sql-server - 存储过程中适当范围的事务

mysql - 从连接表中获取结果