PostgreSQL:列“crab_id”指定不止一次

时间:2015-11-12 16:49:54

标签: postgresql inner-join

使用PostgreSQL调用,

CREATE TABLE condor_xrootd AS
       SELECT * FROM condor INNER JOIN xrootd_ext
       ON (
xrootd_ext.CRAB_Id = condor.CRAB_Id AND
REPLACE(condor.CRAB_ReqName, '_', ':') = xrootd_ext.CRAB_ReqName
);

我收到了错误,

$ psql condor -f ./sql/inner_join.sql 
psql:./sql/inner_join.sql:6: ERROR:  column "crab_id" specified more than once

这是可以理解的,因为每个表都有一个Crab_Id列。我希望能够在不必指定列的情况下进行内连接,因为我在两个表中有大约400列。

如果我可以在不单独列出列的情况下以某种方式摆脱此错误,请告诉我。

编辑:

我忘了提及速度和稳定性在这里至关重要,因为我的加入可能需要几天时间。

2 个答案:

答案 0 :(得分:1)

create table condor_xrootd as
select *
from
    condor
    inner join
    xrootd_ext using (crab_id)
where replace(condor.crab_reqname, '_', ':') = xrootd_ext.crab_reqname

答案 1 :(得分:1)

您可以从构建两个表的结果集创建表。您的错误表示crab_idcondor表中都存在xrootd_ext列,Postgresql不知道应该选择哪个。

您应指定要创建表的字段。像这样:

CREATE TABLE condor_xrootd AS
       SELECT
          condor.*, -- here we take all fields from condor table
          xrootd_ext.crab_reqName -- here we take crab_reqName field from xrootd_ext
       FROM condor INNER JOIN xrootd_ext
       ON (
xrootd_ext.CRAB_Id = condor.CRAB_Id AND
REPLACE(condor.CRAB_ReqName, '_', ':') = xrootd_ext.CRAB_ReqName
);