【问题标题】:MySQL stored procedure how to generate a new auto_increment?MySQL存储过程如何生成新的auto_increment?
【发布时间】:2021-12-31 15:13:34
【问题描述】:

我在 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 stored-procedures mariadb


【解决方案1】:

如果你的 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

【讨论】:

  • 它向我显示了这个错误imgur.com/a/JjmhfVj 这是否意味着 MySQL 不支持 ROW_NUMBER()?奇怪,因为我的版本是 10.1.36-MariaDB
  • 'MariaDB 从 10.2 开始窗口函数首先在 MariaDB 10.2.0 中引入。'升级是一种选择吗? ps mariadb 不是 mysql 请添加 mariadb 标签并更正您的问题。
  • 谢谢它的工作,刚刚更新到10.4版,一直认为mariadb和mysql是一回事。谢谢你
猜你喜欢
  • 2012-02-22
  • 2011-04-25
  • 2012-07-05
  • 2021-12-09
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多