33

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

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

我在想一些事情:

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

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

有任何想法吗?

编辑:它是 DB2 v10,但这个问题纯粹出于好奇。只是想知道有没有可能...

4

6 回答 6

25

您可以使用临时表

创建临时表

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;
于 2016-08-15T08:59:01.963 回答
16

对于 SQL Server,语法为:

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

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

于 2013-04-12T13:35:14.533 回答
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;
/
于 2015-07-27T15:09:07.283 回答
2

使用所需的列数创建一个 VIEW。

假设 Tbl1 有 4 列。创建一个包含所需列的视图。这里 Col1 已被排除。

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

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

INSERT INTO TBL2
SELECT GETDATE(), * 
FROM V1

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

希望能帮助到你

于 2013-04-12T13:44:49.700 回答
1

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

 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

于 2013-04-12T14:03:08.743 回答
1

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

    `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)乘以金额。如果您切换增加和总计的分配顺序,那么总计将在计算中使用源/原始增加。

于 2020-01-30T21:02:56.827 回答