sql - 将具有两列的行转换为一列的两行

标签 sql postgresql join union

我有两列,confid1confid2。它们都具有相同的数据类型。

我不知何故需要将 confid2 带入 confid1,但不连接它们。相反,将其插入到 confid1 下的新行中。

原文:

confid1     confid2
AACII1C1    AACII1C2

我试过使用 UNION 如下:

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

然后它返回 confid1 中的 confid1confid2 的组合,这就是我要找的,如下所示:

confid1
AACII1C1
AACII1C2

现在,问题是另一个表中的一列与 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)

当它不应该返回重复的“pdbcode”值时,如下所示:

confid1,    pdbcode
AACII1C1    2a4n
AACII1C2    2a4n

我希望它选择并返回与 confid1confid2 相关的 pdbcode 列,如下所示:

confid1,    pdbcode
AACII1C1    2a4n
AACII1C2    1b87

最佳答案

更改您的第二个 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 语法

关于sql - 将具有两列的行转换为一列的两行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8646125/

相关文章:

mysql - SQL左连接和group_concat返回重复数据

ruby-on-rails - Rails 生产 fatal error : database "db/production.postgresql" does not exist

postgresql - 使用 postgres pg_dump 命令时出现此错误消息的原因是什么?

sql - 限制 postgreSQL 更新命令

java - hql join 无法解析属性;使用两个表映射

Mysql 在一个查询中使用连接表进行搜索和排序

Java:JDBC ResultSet 未填充所有查询结果

sql - 如何做相当于 "limit distinct"?

sql - 为什么这个 SQL 查询不起作用? CS50 Pset7 - 电影

mysql - 从表中为每种请求类型选择不同的 user_id