我把两张不同的桌子组合在一起,一张叫DynDom,另一张是CATH。我正在尝试从该表中删除重复项,如下所示:
但是,如果我从表中选择distinct Dyndom pdbcode,它将返回该pdbcode的不同值。

根据上面的图片,我注释掉了表中的DynDom/CATH列,并分别运行DynDom/CATH的查询,它相应地返回了这些值,这正是我需要的,我想知道是否可以使用两个不同的语句来返回基于pdbcode的整个表的不同值。
这是我的代码:

select DISTINCT
    cath_dyndom_table_2."DYNDOM_DOMAINID",
    cath_dyndom_table_2."DYNDOM_DSTART",
    cath_dyndom_table_2."DYNDOM_DEND",
    cath_dyndom_table_2."DYNDOM_CONFORMERID",
    cath_dyndom_table_2.pdbcode,
    cath_dyndom_table_2."DYNDOM_ChainID",
    cath_dyndom_table_2.cath_pdbcode,
    cath_dyndom_table_2."CATH_BEGIN",
    cath_dyndom_table_2."CATH_END"
from
    cath_dyndom_table_2
where
    pdbcode = '2hun'
order by
    cath_dyndom_table_2."DYNDOM_DOMAINID",
    cath_dyndom_table_2."DYNDOM_DSTART",
    cath_dyndom_table_2."DYNDOM_DEND",
    cath_dyndom_table_2.pdbcode,
    cath_dyndom_table_2.cath_pdbcode,
    cath_dyndom_table_2."CATH_BEGIN",
    cath_dyndom_table_2."CATH_END";

最后,我希望根据pdbcode从DynDom和CATH中搜索域并返回行,而不需要重复的值。
谢谢您。
更新:
这是我做的视图表。
    CREATE VIEW cath_dyndom_table AS
SELECT
  r.domainid AS "DYNDOM_DOMAINID",
  r.DomainStart AS "DYNDOM_DSTART",
  r.Domain_End AS "DYNDOM_DEND",
  r.ddid AS "DYN_DDID",
  r.confid AS "DYNDOM_CONFORMERID",
  r.pdbcode,
  r.chainid AS "DYNDOM_ChainID",
  d.cath_pdbcode,
  d.cathbegin AS "CATH_BEGIN",
  d.cathend AS "CATH_END"
FROM dyndom_domain_table r
  FULL OUTER JOIN cath_domains d ON d.cath_pdbcode::character(4) = r.pdbcode
  ORDER BY confid ASC;

最佳答案

听起来好像你想要一个域名和每个表的范围的联合-这可以像这样实现:

SELECT DYNDOM_DOMAINID, DYNDOM_DSTART, DYNDOM_DEND
FROM DynDom
UNION
SELECT RTRIM(cath_pdbcode), CATH_BEGIN, CATH_END
FROM CATH

这应该消除确切的重复(即,域名,开始和结束都是相同的),但不会消除重复域名与不同的范围-如果这些存在,你将需要决定如何处理它们(保持它们作为单独的条目,结合它们的最低开始和最高结束,或其他任何选项是首选)。
编辑:实际上,我相信只要将视图中的JOIN-ON条件更改为:
FULL OUTER JOIN cath_domains d
ON d.cath_pdbcode::character(5) = r.pdbcode || r.chainid AND
   r.DomainStart <= d.cathbegin AND
   r.Domain_End >= d.cathend

关于sql - 在SQL中使用两个DISTINCT语句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8835705/

10-10 16:33