sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan finder du relation fra Snomed Postgres SQL-database

Ifølge NHS CT-browser , som måske ikke er tilgængelig overalt, 93880001 har tre forældre:

  • Malign tumor i lungen (lidelse)
  • Primær malign neoplasma i intrathoraxorganer (lidelse)
  • Primær malign neoplasma i luftvejene (lidelse)

og 31 børn:

  • Carcinom af lungeparenkym (lidelse)
  • Epithelioid hæmangioendotheliom i lunge (lidelse)
  • Non-Hodgkins lungelymfom (lidelse)
  • Ikke-småcellet lungekræft (lidelse)
  • og så videre...

Måden at finde højere og lavere niveauer af hierarkiet på er at bruge relationship_f.sourceid og relationship_f.destinationid . Raw-tabellerne er dog ikke brugervenlige, så jeg vil foreslå at lave nogle synspunkter. Jeg har taget koden fra Oracle .sql-filerne i dette GitHub-repo.

Først laver vi en visning med koncept-id'er og foretrukne navne:

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

Så laver vi et syn på relationer:

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;

Så en forespørgsel om at udskrive navnene og id'erne for de tre overordnede koncepter ville være:

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

Bemærk, at dette faktisk returnerer tre ekstra koncepter, som online SNOMED-browseren mener er forældede. Jeg er ikke sikker på hvorfor.

For at udskrive navne og id'er for underordnede koncepter skal du erstatte destinationId med sourceId :

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

Bemærk, at dette faktisk returnerer seksten ekstra koncepter, som online SNOMED-browseren mener er forældede. Igen, jeg kan ikke finde en pålidelig måde at udelukke kun disse seksten fra resultaterne.

Herfra er forespørgsler om at få bedsteforældre og børnebørn ligetil.




  1. Postgres GROUP BY på jsonb indre felt

  2. MySQL Limit, Group og AVG Query

  3. Flet to forespørgsler i Mysql

  4. FEJL:kunne ikke indlæse biblioteket "/opt/PostgreSQL/9.0/lib/postgresql/plperl.so":libperl.so: