Podle Prohlížeč NHS CT , která nemusí být dostupná odkudkoli, 93880001 má tři rodiče:
- Maligní nádor plic (porucha)
- Primární maligní novotvar nitrohrudních orgánů (porucha)
- Primární maligní novotvar dýchacích cest (porucha)
a 31 dětí:
- Karcinom plicního parenchymu (porucha)
- Epitelioidní hemangioendoteliom plic (porucha)
- Non-Hodgkinův lymfom plic (porucha)
- Nemalobuněčný karcinom plic (porucha)
- a tak dále...
Způsob, jak najít vyšší a nižší úrovně hierarchie, je použít relationship_f.sourceid
a relationship_f.destinationid
. Surové tabulky však nejsou uživatelsky přívětivé, takže bych navrhoval udělat nějaké pohledy. Převzal jsem kód ze souborů Oracle .sql v toto
GitHub repo.
Nejprve vytvoříme pohled s ID konceptů a preferovanými názvy:
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';
Pak uděláme pohled na vztahy:
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;
Dotaz na vytištění názvů a ID tří nadřazených konceptů by tedy byl:
select *
from relationshipwithnames r
where r.sourceId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Všimněte si, že to ve skutečnosti vrací tři další koncepty, které online prohlížeč SNOMED považuje za zastaralé. Nejsem si jistý proč.
Chcete-li vytisknout jména a ID podřízených pojmů, nahraďte destinationId
s sourceId
:
select *
from relationshipwithnames r
where r.destinationId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Všimněte si, že to ve skutečnosti vrací šestnáct dalších konceptů, které online prohlížeč SNOMED považuje za zastaralé. Opět nemohu najít spolehlivý způsob, jak z výsledků vyloučit pouze těchto šestnáct.
Odtud jsou dotazy k získání prarodičů a vnoučat přímočaré.