2011-12-27 22 views
0

我有兩個加入了我以前加入與其他表的表,我想「ddid」與「confid1」加入一起預連接表,以一個單一的表

這裏連接起來,代碼如下:

SELECT r.domainid, r.dombegin, r.domend, d.ddid 
FROM domainregion AS r 
JOIN dyndomrun AS d ON r.domainid::varchar(8) = d.ddid 
ORDER BY r.domainid, d.ddid, r.dombegin, r.domend; 

(SELECT confid1 as id1, conformer.pdbcode, conformer.chainid 
from dyndomrun JOIN conformer 
      ON dyndomrun.confid1 = conformer.id) 
UNION 
(SELECT confid2 as id2, conformer.pdbcode, conformer.chainid 
from dyndomrun JOIN conformer ON dyndomrun.confid2 = conformer.id) 

最後,我想有含DOMAINID,dombegin,domend,ddid,confid1,pdb號,chainid新表。

這是可能的,因爲當我試着做一個預加入表的聯合時,它給我一個錯誤,說明每個UNION查詢必須具有相同數量的列。

請指教。謝謝。

+2

命名一個ID1和其他ID2導致您的問題,我認爲 - 他們的名字一樣 – RThomas

+0

你爲什麼要添加支架安裝到您的工會? –

+0

不應該有括號嗎? – Jeiman

回答

1

如果我理解正確:

SELECT 
    r.domainid, 
    r.dombegin, 
    r.domend, 
    d.ddid, 
    d.confid1 AS confid, 
    c.pdbcode, 
    c.chainid 
FROM dyndomrun d 
    INNER JOIN conformer c ON d.confid1 = c.id 
    INNER JOIN domainregion r ON r.domainid::varchar(8) = d.ddid 
UNION ALL 
SELECT 
    NULL, 
    NULL, 
    NULL, 
    d.ddid, 
    d.confid2, 
    c.pdbcode, 
    c.chainid 
FROM dyndomrun d 
    INNER JOIN conformer c ON d.confid2 = c.id 
+0

它的工作原理。謝了哥們。雖然「confid2」沒有鏈接到「ddid」,所以我所做的只是取出一個NULL值並添加「d.ddid」,以便它將ddid添加到confid2也是:)再次感謝隊友。 – Jeiman

+0

@ jeiman90:這是第二個SELECT中的最後一個NULL,不是嗎?爲了完整性,我也更新了我的答案。 –

0

會不會像這樣的工作?

select domainid, dombegin, domened, ddid, confid_id, pdbcode, chainid 
from (
SELECT r.domainid, r.dombegin, r.domend, d.ddid 
FROM domainregion AS r JOIN dyndomrun AS d ON r.domainid::varchar(8) = d.ddid 
ORDER BY r.domainid, d.ddid, r.dombegin, r.domend 
) first 
inner join (
(SELECT confid1 as confid_id, conformer.pdbcode, conformer.chainid 
from dyndomrun JOIN conformer ON dyndomrun.confid1 = conformer.id) 
UNION 
(SELECT confid2 as confid_id, conformer.pdbcode, conformer.chainid 
from dyndomrun JOIN conformer ON dyndomrun.confid2 = conformer.id) 
) second 
on first.ddid=second.confid_id 

可能會很慢。