从SELECT插入但更改一列?

时间:2013-04-12 13:32:41

标签: sql

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

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

我正在考虑以下方面:

Insert into table
select * replace col1 with current date
from table
where yada yada yada

一种可能性是复制一行并执行和更新,但我们可以说这不是一个选项,因为索引或其他东西。

有什么想法吗?

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

6 个答案:

答案 0 :(得分:10)

您可以使用临时表

创建临时表

CREATE TEMPORARY TABLE temp_table AS (SELECT * FROM MyTable WHERE ...);

更新列

UPDATE temp_table SET column='Value' WHERE ...;

或删除列

ALTER TABLE temp_table DROP column_name;

插入目的地表

INSERT INTO MyDestinationTable SELECT * FROM temp_table;

答案 1 :(得分:9)

对于SQL Server,语法为:

insert  into TargetTable
        (col1, col2, col3, ...)
select  getdate(), col2, col3, ... 
from    SourceTable

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

答案 2 :(得分:2)

创建一个包含所需列数的VIEW。

假设Tbl1有4列。创建包含所需列的视图。 Col1已被排除在外。

CREATE VIEW V1 AS
SELECT col2, col3, col4
FROM TBL1

使用VIEW进行插入。 TBL2的Col1值将是当前日期,对于其他列,值将来自视图V1,即。,col2,col3,col4来自TBL1

INSERT INTO TBL2
SELECT GETDATE(), * 
FROM V1

这样您就不需要每次都指定所有列。

希望有所帮助

答案 3 :(得分:2)

使用Oracle

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;
/

答案 4 :(得分:1)

假设您的select具有在插入之前唯一地将结果集wrt定义到目标表的内容的属性,您可以应用以下两个步骤:

 Insert into target_table
 select *
  from source_table
 where yada yada yada
   and characteristic_yada
     ;

update target_table
   set col1 = current date
 where characteristic_yada
     ;

 commit;

确保在同一事务中发出两个命令,如图所示。另请注意,characteristic_yada必须适用于源表和目标表,并且在每次应用语句之前需要检查characteristic_yada的适用性,除非它们引用taregt表的pks / aks < / p>

答案 5 :(得分:0)

zim RDBMS将允许它。 除非被let语句覆盖,否则所有与fieldname匹配的字段都将从源中获取值。例如。

    `add all details from details where account_month = 20190101 let level = 2 increase = base * 1.1 total = increase * amount`

这将为指定会计月份的所有明细记录添加一个第2级记录,其中所有字段值均与源集匹配,但以下分配/计算的金额除外: 等级是2。 增加是原始基准时间1.1。 总数是新增加的数量(原始基础乘以1.1)乘以数量。 如果您切换增量和总计的分配顺序,则总计将使用计算中的源/原始增量。