Postgres从多个连接创建表

时间:2014-04-15 12:36:36

标签: sql postgresql join create-table

我有一个带有大量属性(> 15,000)的数据挖掘问题。我使用公共Id字段表示多个表中的数据。删除空属性后,我想合并生成的较小的表,以便我可以计算相关性以删除redundent属性 我可以轻松加入表格:

select * from lrg_bin0 k0
  join lrg_bin1 k1 on k0.id = k1.id
  join lrg_bin2 k2 on k0.id = k2.id
  join lrg_bin3 k3 on k0.id = k3.id

但是当我尝试用:

创建一个新表时
Create table mrg0 as (
  select * from lrg_bin0 k0
    join lrg_bin1 k1 on k0.id = k1.id
    join lrg_bin2 k2 on k0.id = k2.id
    join lrg_bin3 k3 on k0.id = k3.id
) 

Postgress抱怨“专栏”id“指定不止一次”

非常多的属性意味着我正在以编程方式执行所有操作,因此建议我可以生成的查询的答案将会受到赞赏。

2 个答案:

答案 0 :(得分:3)

使用using代替on

create table mrg0 as 
select *
from
    lrg_bin0 k0
    join lrg_bin1 k1 using (id)
    join lrg_bin2 k2 using (id)
    join lrg_bin3 k3 using (id)

From the manual

  

此外,USING意味着每对等效列中只有一对将包含在连接输出中,而不是两者都包含

答案 1 :(得分:1)

问题是在SQL中使用on执行连接时,匹配列将在每个表中包含一次。您可以做的是从ala中指定您想要列的表: / p>

Create table mrg0 as (
  select k1.id, ... from lrg_bin0 k0
    join lrg_bin1 k1 on k0.id = k1.id
    join lrg_bin2 k2 on k0.id = k2.id
    join lrg_bin3 k3 on k0.id = k3.id
)