Как следует заполнить колонку таблицы?

Как можно заполнить столбец в существующей таблице таким образом, чтобы каждая следующая строка имела значение, увеличивающееся на 1, начиная с 1 и продолжая до последней строки? <br/> Используемая база данных - MariaDB, тип данных столбца - INT.
  • 6 октября 2024 г. 16:44
Ответы на вопрос 2
Чтобы обновить колонку в существующей таблице так, чтобы каждая следующая строка имела значение, увеличивающееся на 1, начиная с 1, вы можете воспользоваться следующими методами в MariaDB.

### Пример SQL-запроса

Предположим, у вас есть таблица `my_table` с колонкой `my_column`, которую вы хотите заполнить. Вот один из способов, как это можно сделать:

1. **Создание временной таблицы для нумерации** (если необходимо): Вы можете создать временную таблицу для нумерации строк.

```sql
CREATE TEMPORARY TABLE temp_numbers AS 
SELECT @rownum := @rownum + 1 AS rownum, id 
FROM my_table, (SELECT @rownum := 0) r 
ORDER BY id;
```

2. **Обновление существующего столбца** с использованием временной таблицы:

```sql
UPDATE my_table
JOIN temp_numbers ON my_table.id = temp_numbers.id
SET my_table.my_column = temp_numbers.rownum;
```

### Альтернативный способ с использованием подзапроса

Если хотите сделать всё за один запрос, можно использовать переменные непосредственно в одном запросе:

```sql
SET @rownum = 0;

UPDATE my_table
SET my_column = (@rownum := @rownum + 1)
ORDER BY id;
```

### Объяснение:
- В первом случае мы создаем временную таблицу `temp_numbers`, которая содержит результирующие номера строк вместе с идентификаторами.
- Во втором запросе мы используем переменные MariaDB для задания значения `my_column` через инкремент переменной `@rownum`.

### Обратите внимание:
- Убедитесь, что у вас есть уникальный идентификатор (например, `id`), по которому можно упорядочивать строки. 
- Если у вас есть уже какие-то данные в `my_column`, они будут перезаписаны. Убедитесь в этом, прежде чем выполнять запрос.
UPDATE test
JOIN ( SELECT id, ROW_NUMBER() OVER (ORDER BY id) new_id
       FROM test ) AS cte USING (id)
SET test.new_id = cte.new_id;

id - UNIQUE NOT NULL, либо вообще PRIMARY KEY. Поле либо выражение.
Похожие вопросы