2011-12-27 12 views
0

はコードです:終わり1つのテーブルに一緒に事前に結合されたテーブルを結合

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、pdbcode、chainidを含む新しいテーブルを持っていると思います。

これは、各結合クエリの列数が同じでなければならないことを示す、事前結合テーブルの結合を実行しようとするとエラーになるためです。

お知らせください。ありがとうございました。

+2

は1つの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値の1つを取り出して "d.ddid"を追加して、confid2にddidを追加するようにしました。 – Jeiman

+0

@ jeiman90:2番目の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 

おそらく遅くなる可能性があります。

関連する問題