В основном то, что я пытаюсь сделать в sql, - это найти способ сделать оператор select insert, где все значения в других столбцах останутся прежними, но значение одного из столбцов будет увеличиваться на 1 для каждой созданной строки. Мне интересно, есть ли способ сделать это в SQL.
🤔 А знаете ли вы, что...
SQL поддерживает подзапросы (subqueries) для выполнения вложенных запросов.
Ты можешь использовать:
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
, таблица содержит:
COL1 COL2 COL3 1 1 1 2 2 2 3 3 3 1 1 2 2 2 3 3 3 4
И значения 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
будут заполнены с использованием следующих значений последовательности.
дб <> рабочий пример здесь