sql >> データベース >  >> RDS >> PostgreSQL

SnomedPostgresSqlデータベースから関係を見つける方法

    NHSCTブラウザー 、どこからでもアクセスできるとは限らないため、93880001には3人の親がいます:

    • 肺の悪性腫瘍(障害)
    • 胸腔内臓器の原発性悪性新生物(障害)
    • 気道の原発性悪性新生物(障害)

    と31人の子供:

    • 肺実質のがん(障害)
    • 肺の類上皮血管内皮腫(障害)
    • 非ホジキンリンパ腫(障害)
    • 非小細胞肺がん(障害)
    • など...

    階層の上位レベルと下位レベルを見つける方法は、relationship_f.sourceidを使用することです。 およびrelationship_f.destinationid 。ただし、生のテーブルはユーザーフレンドリーではないため、いくつかのビューを作成することをお勧めします。 これ GitHubリポジトリ。

    まず、コンセプトIDと優先名を使用してビューを作成します。

    create view conceptpreferredname as
    SELECT distinct c.id conceptId, d.term preferredName, d.id descriptionId
    FROM postgres.snomedct.concept_f c
    inner JOIN postgres.snomedct.description_f d
      ON c.id = d.conceptId
      AND d.active = '1'
      AND d.typeId = '900000000000013009'
    inner JOIN postgres.snomedct.langrefset_f l
      ON d.id = l.referencedComponentId
      AND l.active = '1'
      AND l.refSetId = '900000000000508004'  -- GB English
      AND l.acceptabilityId = '900000000000548007';
    

    次に、関係のビューを作成します。

    CREATE VIEW relationshipwithnames AS
    SELECT id, effectiveTime, active,
        moduleId, cpn1.preferredName moduleIdName,
        sourceId, cpn2.preferredName sourceIdName,
        destinationId, cpn3.preferredName destinationIdName,
        relationshipGroup,
        typeId, cpn4.preferredName typeIdName,
        characteristicTypeId, cpn5.preferredName characteristicTypeIdName,
        modifierId, cpn6.preferredName modifierIdName
    from postgres.snomedct.relationship_f relationship,
        conceptpreferredname cpn1,
        conceptpreferredname cpn2,
        conceptpreferredname cpn3,
        conceptpreferredname cpn4,
        conceptpreferredname cpn5,
        conceptpreferredname cpn6
    WHERE moduleId = cpn1.conceptId
    AND sourceId = cpn2.conceptId
    AND destinationId = cpn3.conceptId
    AND typeId = cpn4.conceptId
    AND characteristicTypeId = cpn5.conceptId
    AND modifierId = cpn6.conceptId;
    

    したがって、3つの親概念の名前とIDを出力するクエリは次のようになります。

    select *
    from relationshipwithnames r
    where r.sourceId = '93880001'
    and r.active = '1'
    and r.typeIdName = 'Is a';
    

    これは実際には3つの追加の概念を返すことに注意してください。これは、オンラインSNOMEDブラウザーが廃止されたと見なします。理由はわかりません。

    子の概念の名前とIDを出力するには、destinationIdを置き換えます。 sourceIdを使用 :

    select *
    from relationshipwithnames r
    where r.destinationId = '93880001'
    and r.active = '1'
    and r.typeIdName = 'Is a';
    

    これは実際には16の追加の概念を返すことに注意してください。これは、オンラインSNOMEDブラウザーが廃止されたと見なします。繰り返しますが、これらの16個だけを結果から除外する信頼できる方法を見つけることができません。

    ここから、祖父母と孫を取得するためのクエリは簡単です。




    1. SQLite BETWEEN

    2. 親の下にネストされた子を返すMYSQLクエリを作成するにはどうすればよいですか?

    3. 2つの日付の間の月

    4. MySQLビット演算、ブルームフィルター