2017-06-15 52 views
1

我想创建一个新表作为两个表的联合而不重复的结果。我在stackoverflow搜索,我发现一个问题,正是我想要的,但使用mysql Create a new table from merging two tables with union。在MySQL使用union在postgres中创建Union两个表的新表

解决方案

CREATE TABLE new_table 
    SELECT * FROM table1 
    UNION 
    SELECT * FROM table2; 

我试图做同样的事情,但我得到:

SQL错误。

我想实现这一点,如果有可能与类似于mysql的声明。

我知道如果你首先用我想要的字段创建一个新表。我可以通过这个表的联合对此表进行选择。如果没有其他选择,我必须做这样的事情。

但是总结如果可能在postgres中用mysql做一些类似的问题。我想用语法糖做

在此先感谢

更新

为了澄清我有两个表具有相同的结构

TABLE1(id,field1,field2,field3) 
TABLE2(id,field1,field2,field3) 

,并在表我想要

TABLE3(id,field1,field2,field3) 

请注意,我试图

CREATE TABLE new_table as 
    SELECT * FROM table1 
    UNION 
    SELECT * FROM table2; 

和它的作品,但并没有把字段例如正确的位置摆台1场3场中的1 table_result

+1

在看一看:https://stackoverflow.com/questions/22953450/postgres-create-table-from-select – McNets

+1

@McNets非常感谢我只缺少当你回答这个我去接受,基本上是有用的这个答案对我来说https://stackoverflow.com/a/22953921/2399444 – Cyberguille

+0

@McNets在我的情况下,请注意,我不想在我的新表,我有一个列ID – Cyberguille

回答

2

你缺少AS关键字:

CREATE TABLE new_table 
AS 
    SELECT * FROM table1 
    UNION 
    SELECT * FROM table2;

如果你需要在一个特定的顺序列,那么在选择指定它们:

CREATE TABLE new_table 
AS 
SELECT id, column1, column2, column3 
FROM table1 
UNION 
SELECT id, column1, column2, column3 
FROM table2; 

手册中的更多细节:
https://www.postgresql.org/docs/current/static/sql-createtableas.html

+0

还行,但请检阅我的更新 – Cyberguille

+0

我认为选择的顺序很重要 – Cyberguille

+1

@Cyber​​guille:看到我的更新,你需要指定列明确。另一个很好的例子,为什么'选择*'应该避免 –