如何在 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

并且插入行的col1col2值相同,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