2012-01-07 81 views
0

我正尝试与另一个表格并排连接预先连接的表格,但似乎无法正常工作。将预先连接的表格与另一个表格结合起来

下面的代码:

SELECT 
    r.domainid, 
    r.dombegin AS DomainStart, 
    r.domend AS Domain_End, 
    d.ddid, 
    d.confid1 AS confid, 
    c.pdbcode, 
    c.chainid, 
    a.pdbcode AS "cath_pdbcode", 
    c.pdbcode 
FROM dyn_dyndomrun d, cath_domains a 
    INNER JOIN dyn_conformer c ON d.confid1 = c.id 
    INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid 
    INNER JOIN dyn_conformer AS c ON a.pdbcode::character(4) = c.pdbcode 
UNION ALL 
SELECT 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    d.ddid, 
    d.confid2, 
    c.pdbcode, 
    c.chainid 
FROM dyn_dyndomrun d 
    INNER JOIN dyn_conformer c ON d.confid2 = c.id 
    ORDER BY confid ASC 

也有一些是错误的,在这条线

FROM dyn_dyndomrun d, cath_domains a 
     INNER JOIN dyn_conformer c ON d.confid1 = c.id 
     INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid 
     INNER JOIN dyn_conformer AS c ON a.pdbcode::character(4) = c.pdbcode 

这里的错误:

ERROR: invalid reference to FROM-clause entry for table "d" 
LINE 11: INNER JOIN dyn_conformer c ON d.confid1 = c.id 
             ^
HINT: There is an entry for table "d", but it cannot be referenced from this part of the query. 


********** Error ********** 

ERROR: invalid reference to FROM-clause entry for table "d" 
SQL state: 42P01 
Hint: There is an entry for table "d", but it cannot be referenced from this part of the query. 
Character: 236 

最后,我想有一个表中,它有,"domainid, domainstart, domainend, ddid, confid, chainid, pdbcode from conformer and the chain id"和沿着一边,我想有一组新的列另一个表,如"pdbcode from cath_domains, cathbegin, cathend"

来自conformer和cath_domains的pdbcode相互匹配,因此我想交叉引用它们。

我在做错误的方式吗?

+1

小心发布您遇到的错误? – Kenaniah 2012-01-07 00:32:10

+0

'错误:对表d的FROM子句条目的无效引用 LINE 11:INNER JOIN dyn_conformer c ON d.confid1 = c.id ^ 提示:有一个表“d”的条目,但它不能从这部分查询中引用。 ********** **********错误 错误:无效引用FROM子句条目表 “d” SQL状态:42P01 提示:有一个表“d”的条目,但它不能从查询的这一部分引用。 字符:236' – Jeiman 2012-01-07 00:32:57

+0

在我的问题中发布了错误,以及 – Jeiman 2012-01-07 00:34:42

回答

2

停止执行隐式交叉连接。另外ypercube指出,还需要清理其他一些小东西,特别是删除重复的连接。

SELECT 
    r.domainid, 
    r.dombegin AS DomainStart, 
    r.domend AS Domain_End, 
    d.ddid, 
    d.confid1 AS confid, 
    c.pdbcode, 
    c.chainid, 
    a.pdbcode AS "cath_pdbcode", 
    c.pdbcode 
FROM dyn_dyndomrun d 
    INNER JOIN dyn_conformer c ON d.confid1 = c.id 
    INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid 
    INNER JOIN cath_domains a ON a.pdbcode::character(4) = c.pdbcode 
UNION ALL 
SELECT 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    NULL, 
    d.ddid, 
    d.confid2, 
    c.pdbcode, 
    c.chainid 
FROM dyn_dyndomrun d 
    INNER JOIN dyn_conformer c ON d.confid2 = c.id 
    ORDER BY confid ASC 
相关问题