如何使用select查询创建表时添加列?

时间:2016-01-11 08:04:53

标签: sql postgresql

我正在使用以下方式创建表:

CREATE TABLE test AS 
  SELECT    t1.column1, 
            t1.column2, 
            t1.column3, 

            t2.column4 , 
            t2.column6 , 
            t1.column8 
  FROM      table_1 t1
  JOIN table_2 t2 
  ON        t1.column1 = t2.column2 ;

之后我使用以下alter command

在新创建的表中添加列
ALTER TABLE test ADD COLUMN New_column1 varchar NOT NULL DEFAULT 0,
              ADD COLUMN New_column2    varchar NOT NULL DEFAULT 0, 
              ;

现在我想将两个查询合并为一个。

我怎么能这样做?

谢谢

2 个答案:

答案 0 :(得分:1)

虽然很难在NOT NULL语句中设置CREATE TABLE AS约束,但您仍应该能够在单个SQL语句中在新表中创建新列。

但是,您需要第二个(更快)SQL来为两个新列设置NOT NULL

SELECT 
    t1.column1, 
    t1.column2, 
    t1.column3, 
    t2.column4, 
    t2.column6, 
    t1.column8, 
    0 AS New_column1, 
    0 AS New_column2
  INTO test
FROM table_1 t1
JOIN table_2 t2 ON t1.column1 = t2.column2;

ALTER TABLE test ALTER COLUMN New_column1 SET DEFAULT NOT NULL;
ALTER TABLE test ALTER COLUMN New_column1 SET DEFAULT NOT NULL;

答案 1 :(得分:0)

有多种方法可供选择:

1)这将创建表并插入数据。

Select * into test from (
SELECT  t1.column1, 
        t1.column2, 
        t1.column3, 
        t2.column4 , 
        t2.column6 , 
        t1.column8 
FROM table_1 t1
JOIN table_2 t2 
ON   t1.column1 = t2.column2
)