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.