可以使用JOINS组合两个表而不会丢失所有数据

时间:2012-01-08 04:22:34

标签: sql postgresql join view

我有一个如下表格,我想知道我是否仍然可以将它们连接在一起,而不会在通过引用JOIN方法进行组合时丢失两个表中的现有数据。

表详情 - 查看表

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 个答案:

答案 0 :(得分:4)

我相信你想要一个FULL OUTER JOIN而不仅仅是一个JOIN(默认情况下是一个INNER JOIN)。在FULL OUTER JOIN中,每个表中的每一行都对应于结果表中的某一行;一个表中与另一个表不匹配的行将使用NULL进行扩展,以填充缺失的列。

如此FULL OUTER JOIN而不仅仅是JOIN,那应该是你。

答案 1 :(得分:1)

我认为你要求左联盟,但我不确定。

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;