Присвоить увеличивающиеся целочисленные значения столбцу в базе данных mysql - PullRequest
1 голос
/ 18 апреля 2020

У нас есть приложение, в котором у нас есть некоторый путь обучения, и каждый путь обучения связан с некоторыми курсами. Связь между путем обучения и курсами хранится в таблице 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 Ответ

1 голос
/ 18 апреля 2020

Если вы используете 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
...