2

2つの異なるテーブルを組み合わせました。一方はDynDomという名前で、もう一方はCATHという名前です。以下のように、そのテーブルから重複を削除しようとしています。 ここに画像の説明を入力してください

ただし、テーブルから個別のDyndom pdbcodeを選択すると、そのpdbcodeの個別の値が返されます。 DynDomテーブル

CATH

上の写真に基づいて、テーブルのDynDom / CATH列をコメントアウトし、DynDom / CATHに対して個別にクエリを実行すると、それに応じてそれらの値が返されました。これが必要であり、2を使用できるかどうか疑問に思いました。 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からドメインを検索し、重複する値を持たずに行を返したいと思います。

ありがとうございました。

アップデート :

これは私が行った私のVIEWテーブルです。

    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;
4

2 に答える 2

3

あなたが得ているのcartesian productは「2つのテーブル」のです。

1-to-1 relation重複のない1行を取得するには、両方の間にある必要がありますtables


あなたはここに何があるか、そしてここにそれらを避ける方法を見ることcartesian joinsできます

于 2012-01-12T13:25:22.117 に答える
2

ドメイン名と各テーブルの範囲のUNIONが必要なように聞こえますが、これは次のように実現できます。

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
于 2012-01-12T13:50:46.693 に答える