Объедините предварительно объединенные таблицы в одну таблицу - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть две соединенные таблицы, которые я ранее объединял с другими таблицами, и я хотел бы, чтобы «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, pdbcode, chainid.

Это возможно сделать, потому чтоКогда я попытался выполнить объединение предварительно объединенной таблицы, он выдал ошибку, указав, что каждый запрос UNION должен иметь одинаковое количество столбцов.

Пожалуйста, сообщите.Спасибо.

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

Если я вас правильно понимаю:

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 голосов
/ 27 декабря 2011

Не будет ли что-то подобное этой работой?

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

Вероятно, будет медленным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...