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

Я пытаюсь соединить предварительно соединенную таблицу с другой, расположенной рядом, но, похоже, она не работает.

Вот код:

SELECT
  r.domainid,
  r.dombegin AS DomainStart,
  r.domend AS Domain_End,
  d.ddid,
  d.confid1 AS confid,
  c.pdbcode,
  c.chainid,
  a.pdbcode AS "cath_pdbcode", 
  c.pdbcode
FROM dyn_dyndomrun d, cath_domains a
  INNER JOIN dyn_conformer c ON d.confid1 = c.id
  INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid
  INNER JOIN dyn_conformer AS c ON a.pdbcode::character(4) = c.pdbcode
UNION ALL
SELECT
  NULL,
  NULL,
  NULL,
  NULL,
  NULL,
  d.ddid,
  d.confid2,
  c.pdbcode,
  c.chainid
FROM dyn_dyndomrun d 
  INNER JOIN dyn_conformer c ON d.confid2 = c.id
  ORDER BY confid ASC

В этой строке что-то не так

FROM dyn_dyndomrun d, cath_domains a
      INNER JOIN dyn_conformer c ON d.confid1 = c.id
      INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid
      INNER JOIN dyn_conformer AS c ON a.pdbcode::character(4) = c.pdbcode

Вот ошибка:

ERROR:  invalid reference to FROM-clause entry for table "d"
LINE 11:   INNER JOIN dyn_conformer c ON d.confid1 = c.id
                                         ^
HINT:  There is an entry for table "d", but it cannot be referenced from this part of the query.


********** Error **********

ERROR: invalid reference to FROM-clause entry for table "d"
SQL state: 42P01
Hint: There is an entry for table "d", but it cannot be referenced from this part of the query.
Character: 236

НаВ конце я хотел бы иметь таблицу, в которой она имеет, "domainid, domainstart, domainend, ddid, confid, chainid, pdbcode from conformer and the chain id", и наряду с этим, я хотел бы иметь новый набор столбцов из другой таблицы, такой как "pdbcode from cath_domains, cathbegin, cathend".

Pdbcode из conformer и cath_domains совпадают друг с другом, и поэтому я хотел бы дать им перекрестную ссылку.

Я делаю это неправильно?

1 Ответ

2 голосов
/ 24 марта 2013

Хватит делать неявные перекрестные соединения.Также, как указал ypercube, необходимо очистить еще несколько мелочей, в частности, удалить дублирующееся соединение.

SELECT
  r.domainid,
  r.dombegin AS DomainStart,
  r.domend AS Domain_End,
  d.ddid,
  d.confid1 AS confid,
  c.pdbcode,
  c.chainid,
  a.pdbcode AS "cath_pdbcode", 
  c.pdbcode
FROM dyn_dyndomrun d
  INNER JOIN dyn_conformer c ON d.confid1 = c.id 
  INNER JOIN dyn_domainregion r ON r.domainid::varchar(8) = d.ddid
  INNER JOIN cath_domains a ON a.pdbcode::character(4) = c.pdbcode
UNION ALL
SELECT
  NULL,
  NULL,
  NULL,
  NULL,
  NULL,
  d.ddid,
  d.confid2,
  c.pdbcode,
  c.chainid
FROM dyn_dyndomrun d 
  INNER JOIN dyn_conformer c ON d.confid2 = c.id
  ORDER BY confid ASC
...