Как сделать оператор select вставки в sql с изменяющимся значением в столбце для каждой строки

В основном то, что я пытаюсь сделать в sql, - это найти способ сделать оператор select insert, где все значения в других столбцах останутся прежними, но значение одного из столбцов будет увеличиваться на 1 для каждой созданной строки. Мне интересно, есть ли способ сделать это в SQL.

🤔 А знаете ли вы, что...
SQL поддерживает подзапросы (subqueries) для выполнения вложенных запросов.


20
1

Ответ:

Решено

Ты можешь использовать:

INSERT INTO table_name (col1, col2, col3)
SELECT col1, col2, col3 + 1
FROM   table_name

Что для примера данных:

CREATE TABLE table_name (col1, col2, col3) AS
SELECT LEVEL, LEVEL, LEVEL FROM DUAL CONNECT BY LEVEL <= 3;

Затем, после INSERT, таблица содержит:

COL1COL2COL3
111
222
333
112
223
334

И значения col1 и col2 вставленных строк одинаковы, а значения col3 увеличены на 1.

Если вы хотите увеличить значения на количество вставляемых строк, вы можете использовать:

INSERT INTO table_name (col1, col2, col3)
SELECT col1, col2, col3 + COUNT(*) OVER ()
FROM   table_name

Однако

Если вы пытаетесь добавить несколько строк и оставить col3 с уникальными значениями, вам не следует использовать этот метод и следует использовать последовательность.

Если у вас есть таблица:

CREATE TABLE table_name (col1, col2, col3) AS
SELECT LEVEL, LEVEL, table_name__col3__seq.NEXTVAL FROM DUAL CONNECT BY LEVEL <= 3;

Затем вы можете вставить строки, используя:

INSERT INTO table_name (col1, col2, col3)
SELECT col1, col2, table_name__col3__seq.NEXTVAL
FROM   table_name

и col3 будут заполнены с использованием следующих значений последовательности.

дб <> рабочий пример здесь