从SELECT插入但更改一列?

bek*_*bek 23 sql

想知道是否有一种方法可以将一行插入另一个表中,但一列除外?

对于有限数量的列来说,这当然很容易,但是当列数增加时,会列出所有列的疲惫.

我正在考虑以下方面:

Insert into table
select * replace col1 with current date
from table
where yada yada yada
Run Code Online (Sandbox Code Playgroud)

一种可能性是复制一行并执行和更新,但是,假设由于索引或其他原因,这不是一个选项.

有任何想法吗?

编辑:这是DB2 v10,但问题出于纯粹的好奇心.只是想知道是否可能......

taa*_*ari 16

您可以使用临时表

创建临时表

CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM MyTable WHERE ...);
Run Code Online (Sandbox Code Playgroud)

更新列

UPDATE temp_table SET column='Value' WHERE ...;
Run Code Online (Sandbox Code Playgroud)

或者删除一列

ALTER TABLE temp_table DROP column_name;
Run Code Online (Sandbox Code Playgroud)

插入目标表

INSERT INTO MyDestinationTable SELECT * FROM temp_table;
Run Code Online (Sandbox Code Playgroud)

  • 我应该在最后删除临时表吗? (2认同)
  • 当然,如果您不需要它做其他任何事情 (2认同)

And*_*mar 10

对于SQL Server,语法为:

insert  into TargetTable
        (col1, col2, col3, ...)
select  getdate(), col2, col3, ... 
from    SourceTable
Run Code Online (Sandbox Code Playgroud)

SQL Server可以为您生成列列表.右键单击表名,然后选择Script as -> Select -> To New Window.

  • 感谢您的回答,只是想知道是否有一个解决方案,您不必列出属性. (4认同)

小智 3

使用甲骨文

DECLARE
CURSOR CUR_D IS
  SELECT *
  FROM TABLE
  WHERE id = some id;
ROW_D CUR_D%ROWTYPE;

BEGIN
  OPEN CUR_D;
  FETCH CUR_D INTO ROW_D;
  CLOSE CUR_D;

  ROW_D.column := 'some data';

  INSERT INTO some table
  VALUES ROW_D;

END;
/
Run Code Online (Sandbox Code Playgroud)