2011-12-27 18 views
2

私は2つの列、confid1confid2を持っています。どちらも同じデータ型です。2列の行を1列の2行に変換する

私は何とかconfid2confid1に持っていきますが、連結しません。代わりに、confid1の下に新しい行に挿入します。

オリジナル:として、それは私が探していたものですconfid1の組み合わせとconfid1内部confid2を返し

(SELECT confid1 as ID1 FROM dyndomrun) 
UNION 
(SELECT confid2 as ID2 FROM dyndomrun) 

confid1  confid2 
AACII1C1 AACII1C2 

は、私は、以下のようにUNIONを使用して試してみました以下:

confid1 
AACII1C1 
AACII1C2 

N他のテーブルの列の1つがconfid1confid2にリンクしていますが、その列はすべて1列で複数行になっています。

今、私は、以下のように、単にコードにpdbcodeを追加し、同じUNION方法を使用して試してみました:

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

そして、それはように仮定していないときには、重複する「pdbcode」の値を返します。以下の下:

confid1, pdbcode 
AACII1C1 2a4n 
AACII1C2 2a4n 

私はそれがconfid1と、以下のようにconfid2に関連pdbcode列を選択して返すようにしたいですあなたがサブクエリに組合を移動することができ、また

select * 
from dyndomrun ddr 
join conformer as c 
on  c.id in (ddr.confid1, ddr.confid2) 

、第二のテーブルにそれを参加:

confid1, pdbcode 
AACII1C1 2a4n 
AACII1C2 1b87 
+0

を使用するように更新。値は通常、一重引用符で囲みます。二重引用符は識別子用であり、特別な場合にのみ必要です。今日のアドバイスとして、[マニュアルの識別子に関する非常に重要な章](http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS)を読んで始めてください。 )。 –

+0

「別のテーブル」の列が、リンクが「AACII1C1」および「AACII1C2」と同時にリンクするのはなぜですか?これ以上の説明がなければ意味をなさない。 –

答えて

1

confid2を使って2番目のJOINをマッチするように変更しますか?

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

注:値のための二重引用符を使用しないでください明示的なJOIN構文

+0

ありがとうございます。 – Jeiman

+0

@ jeiman90:この回答が好きな場合は、左の大きな目盛りでこれを「受け入れてください」 – gbn

+0

すべて完了しました。もう一度説明をもう一度お願いします。 :) – Jeiman

1
(SELECT confid1 as id1, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid1 = conformer.id) 
UNION 
(SELECT confid2 as id2, conformer.pdbcode from dyndomrun, conformer where dyndomrun.confid2 = conformer.id) 
1

あなたは条件スパンの両方に参加させることができ

select * 
from (
     select confid1 as confid 
     from dyndomrun 
     union all 
     select confid2 
     from dyndomrun 
     ) as ddr 
join conformer as c 
on  c.id = ddr.confid 
0
SELECT A.confid1, B.pdbcode 
FROM ( SELECT confid1 FROM dyndomrun 
     UNION 
     SELECT confid2 FROM dyndomrun) A 
LEFT JOIN conformer B 
ON A.confid1 = B.id 
関連する問題