将递增的整数值分配给mysql数据库中的列
Posted
技术标签:
【中文标题】将递增的整数值分配给mysql数据库中的列【英文标题】:Assign increasing integer values to a column in mysql database 【发布时间】:2020-04-18 18:37:24 【问题描述】:我们有一个应用程序,其中我们有一些学习路径,并且每个学习路径都与一些课程相关联。学习路径和课程之间的关联存储在 mysql 表中。现在我们还想将课程位置存储在课程映射的学习路径中,所以我在表中添加了另一列“位置”,我想通过查询回填其中的现有数据,以便为每门课程分配一个数字以任何随机方式从 1 开始(每个学习路径的数字应从 1 开始)。例如,
LP1|C1 LP1|C1|1
LP1|C2 ==> LP1|C2|2
LP1|C3 LP1|C3|3
LP2|C1 LP2|C1|1
LP2|C5 LP2|C5|2
【问题讨论】:
【参考方案1】:如果您运行的是 MySQL 8.0,您可以使用 row_number()
来实现:
select
learning_path,
course,
row_number() over(partition by learning_path order by course) position
from mytable
如果您需要update
查询:
update mytable t
inner join (
select
learning_path,
course,
row_number() over(partition by learning_path order by course) position
from mytable
) t1 on t1.learning_path = t.learning_path and t1.course = t.course
set t.position = t1.position
在早期版本中,一种选择是:
update mytable t
inner join (
select
learning_path,
course,
(select 1 + count(*) from mytable t1 where t1.learning_path = t.learning_path and t1.course < t.course) position
from mytable t
) t1 on t1.learning_path = t.learning_path and t1.course = t.course
set t.position = t1.position
【讨论】:
假设(并非不合理)数字不超过 9 我们使用的是 5.7.12 版本 @Strawberry:是的,否则 OP 需要像'Cnn'
这样的课程。
@ManishRichhariya:我在答案中添加了对早期版本的查询。
是的,或者只是'n'。以上是关于将递增的整数值分配给mysql数据库中的列的主要内容,如果未能解决你的问题,请参考以下文章
错误代码:1366。不正确的整数值:第 2 行的列“ReportsTo”的“NULL”