想知道是否有办法将一行插入另一个表中,但一列除外?
对于有限数量的列,这当然很容易,但是当列数增加时,列出所有列时会有些疲惫。
我正在考虑以下方面:
Insert into table
select * replace col1 with current date
from table
where yada yada yada
一种可能性是复制一行并执行和更新,但我们可以说这不是一个选项,因为索引或其他东西。
有什么想法吗?
编辑: 它是DB2 v10,但问题出于纯粹的好奇心。 只是想知道是否可能......
答案 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)乘以数量。 如果您切换增量和总计的分配顺序,则总计将使用计算中的源/原始增量。