5

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

我想这可能是一个答案 -

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

但令人困惑的是如何分配该新列的数据类型?是否可以仅使用一条 SQL 语句?

4

3 回答 3

2

微软 SQL

你没有提到你的数据库。

这是 MS SQL 的示例

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

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

SQLFiddle 演示

于 2013-08-21T13:57:43.310 回答
2

下面是一个使用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);

然后,您可以根据需要更新那里的值。

于 2013-08-21T13:59:00.347 回答
0

PostgreSQL

今天我需要product用一个带有外键约束的新的 NOT NULL uuid 列来扩展一个表。所以我必须为新列指定现有图像的 uuid。我确实喜欢这样:

INSERT INTO product 
(  
    SELECT 
        product_id,
        product_name,
        '32b295g3-1337-4792-b1c4-9e3412b07982' as product_image_id 
    FROM oldproduct
);
于 2020-07-22T05:44:03.620 回答