2011-12-27 57 views
2

我有兩列confid1confid2。它們都具有相同的數據類型。將一列兩列轉換爲一列兩列

我以某種方式需要將confid2納入confid1,但不能連接它們。請將其插入confid1下的新行。

原文:

confid1  confid2 
AACII1C1 AACII1C2 

我一直在使用UNION嘗試,如下面:

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

然後返回confid1組合和confid2confid1,這正是我一直在尋找,如如下:

confid1 
AACII1C1 
AACII1C2 

N問題是,另一個表中的其中一列與confid1confid2鏈接,但它全部位於單個列中,但爲多行。

現在,我一直在使用同樣的UNION方法試過,只是增加了pdbcode到代碼,如下面:

(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) 

而當它不是假設它返回重複「pdb號」值,如下:

confid1, pdbcode 
AACII1C1 2a4n 
AACII1C2 2a4n 

我希望它選擇並返回與confid1confid2一個pdbcode列,如下面:

confid1, pdbcode 
AACII1C1 2a4n 
AACII1C2 1b87 
+0

請不要使用雙引號的值。值通常用單引號引起來。雙引號用於標識符,僅在特殊情況下才需要。正如我今天早些時候建議的,首先閱讀[手冊中標識符的非常重要的章節](http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS )。 – 2011-12-27 16:10:16

+0

爲什麼「另一個表」中的列與「AACII1C1」和「AACII1C2」同時鏈接?沒有進一步的解釋,這是沒有意義的。 – 2011-12-27 16:13:21

回答

1

更改你的第二個JOIN以匹配使用confid2?

(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

謝謝你的解釋。這工作,因爲它返回必要的pdbcode到其特定的信息:) – Jeiman 2011-12-27 16:31:48

+0

@ jeiman90:如果這個答案是你喜歡的,請「接受」這個與左邊的大勾號 – gbn 2011-12-28 11:25:57

+0

全部完成。非常感謝你的解釋再次:) – Jeiman 2011-12-31 16:18:17

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 dyndomrun ddr 
join conformer as c 
on  c.id in (ddr.confid1, ddr.confid2) 

或者,也可以聯合移動到一個子查詢,並加入一個到第二個表:

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