我把两张不同的桌子组合在一起,一张叫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/