如何在 sql 中执行 select 插入语句,并在每一行的列中更改值
How to do a select insert statement in sql with a changing value in the column for each row
基本上我在 sql 中尝试做的是找到一种方法来执行 select 插入语句,其中其他列中的所有值将保持不变,但其中一列每创建一行,值将增加 1。我想知道在 SQL.
中是否有办法做到这一点
您可以使用:
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
之后,table 包含:
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
具有唯一值,那么您不应使用该方法,而应使用序列。
如果你有 table:
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
将使用下一个序列值填充。
db<>fiddle here
基本上我在 sql 中尝试做的是找到一种方法来执行 select 插入语句,其中其他列中的所有值将保持不变,但其中一列每创建一行,值将增加 1。我想知道在 SQL.
中是否有办法做到这一点您可以使用:
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
之后,table 包含:
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
具有唯一值,那么您不应使用该方法,而应使用序列。
如果你有 table:
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
将使用下一个序列值填充。
db<>fiddle here