Возможность объединения двух таблиц без потери всех данных с помощью JOINS - PullRequest
1 голос
/ 08 января 2012

У меня есть таблица, как показано ниже, и я хотел бы знать, смогу ли я все еще объединить их, не теряя существующие данные из обеих таблиц, когда они объединяются путем ссылки на методы JOIN.

Детали таблицы - VIEW Table

SELECT
  r.domainid,
  r.DomainStart,
  r.Domain_End,
  r.ddid,
  r.confid,
  r.pdbcode,
  r.chainid,
  d.pdbcode AS "CATH_PDBCODE",
  d.cathbegin AS "CATH_BEGIN",
  d.cathend AS "CATH_END"
FROM dyndom_domain_table r
  JOIN cath_domains d ON d.pdbcode::character(4) = r.pdbcode 
  ORDER BY confid ASC;

Как видите, dyndom_domain_table - это таблица VIEW, которую я создал, чтобы мне было проще использовать предложения JOIN с другой таблицей с таким же pdbcode.

Пока он просто возвращает все данные, которые соответствуют коду PDB.То, что я хотел бы сделать, это вернуть все данные, которые совпадают и не совпадают с кодом PDB друг друга.

Есть ли правило, в котором я могу его применить?Или это невозможно?

Ответы [ 2 ]

4 голосов
/ 08 января 2012

Я полагаю, что вы хотите ПОЛНОЕ НАРУЖНОЕ СОЕДИНЕНИЕ, а не просто СОЕДИНЕНИЕ (которое по умолчанию является ВНУТРЕННИМ СОЕДИНЕНИЕМ).В FULL OUTER JOIN каждая строка в каждой таблице будет соответствовать некоторой строке в таблице результатов;строки из одной таблицы, которые не совпадают с другой, будут расширены значениями NULL для заполнения отсутствующего столбца.

Поэтому FULL OUTER JOIN вместо просто JOIN, и это должно сработать.

1 голос
/ 08 января 2012

Я думаю, что вы просите левого соединения, но я не уверен.

SELECT
  r.domainid,
  r.DomainStart,
  r.Domain_End,
  r.ddid,
  r.confid,
  r.pdbcode,
  r.chainid,
  d.pdbcode AS "CATH_PDBCODE",
  d.cathbegin AS "CATH_BEGIN",
  d.cathend AS "CATH_END"
FROM dyndom_domain_table r
  LEFT JOIN cath_domains d ON d.pdbcode::character(4) = r.pdbcode 
  ORDER BY confid ASC;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...