2012-01-07 86 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 
相關問題