将数据从一个表复制到另一个表,同时添加另一个列

时间:2013-08-21 13:50:23

标签: sql

我需要将3个列(带有值)从一个表复制到另一个表(此表将创建为新表),并且还需要在新形成的表中添加一个额外的列。是否只能在一个SQL查询中使用?

我认为这可能是一个答案 -

CREATE TABLE NEW_TBL(Col1,Col2,Col3,New_Col) AS SELECT Col1,Col2,Col3       FROM OLD_TBL

但混淆是如何分配新列的数据类型?只有一个SQL语句可以吗?

3 个答案:

答案 0 :(得分:2)

您没有提及您的数据库。

以下是MS SQL的示例

SELECT Col1,Col2,Col3,'text field' as NEW_COL INTO NEW_TBL FROM OLD_TBL;

此查询将创建新表NEW_TBL并添加来自OLD_TBL的所有数据以及其他文本字段NEW_COL。新字段的类型取决于常量类型,例如,如果您需要INT类型,则可以使用0而不是'text field'常量。

SQLFiddle demo

答案 1 :(得分:1)

以下是使用create table as语法的示例:

CREATE TABLE NEW_TBL AS
    SELECT Col1, Col2, Col3, 'Newcol' as Col4
    FROM OLD_TBL;

要分配数据类型,请使用cast()convert()获取所需类型:

CREATE TABLE NEW_TBL AS
    SELECT Col1, Col2, Col3, cast('Newcol' as varchar(255) as Col4,
           cast(123 as decimal(18, 2)) as col4
    FROM OLD_TBL;

顺便说一下,您还可以将列直接添加到旧表中:

alter table old_tbl add col4 varchar(255);

如果愿意,您可以在那里更新值。

答案 2 :(得分:0)

PostgreSQL

今天,我需要用新的NOT NULL uuid列和外键约束来扩展product表。因此,我必须为新列指定现有图像的uuid。我确实是这样的:

INSERT INTO product 
(  
    SELECT 
        product_id,
        product_name,
        '32b295g3-1337-4792-b1c4-9e3412b07982' as product_image_id 
    FROM oldproduct
);