我有一个带有大量属性(> 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“指定不止一次”
非常多的属性意味着我正在以编程方式执行所有操作,因此建议我可以生成的查询的答案将会受到赞赏。
答案 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)
此外,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
)