Według Przeglądarka NHS CT , który może nie być dostępny zewsząd, 93880001 ma troje rodziców:
- Złośliwy nowotwór płuc (zaburzenie)
- Pierwotny nowotwór złośliwy narządów klatki piersiowej (zaburzenie)
- Pierwotny nowotwór złośliwy dróg oddechowych (choroba)
i 31 dzieci:
- Rak miąższu płuc (zaburzenie)
- Nabłonkowaty hemangioendothelioma płuc (zaburzenie)
- Chłoniak nieziarniczy płuc (zaburzenie)
- Niedrobnokomórkowy rak płuc (zaburzenie)
- i tak dalej...
Sposobem na znalezienie wyższych i niższych poziomów hierarchii jest użycie relationship_f.sourceid
i relationship_f.destinationid
. Jednak surowe tabele nie są przyjazne dla użytkownika, więc sugerowałbym kilka poglądów. Pobrałem kod z plików Oracle .sql w to
Repozytorium GitHub.
Najpierw tworzymy widok z identyfikatorami koncepcji i preferowanymi nazwami:
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';
Następnie tworzymy widok relacji:
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;
Zatem zapytanie do wydrukowania nazw i identyfikatorów trzech pojęć nadrzędnych będzie wyglądało następująco:
select *
from relationshipwithnames r
where r.sourceId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Zauważ, że w rzeczywistości zwraca to trzy dodatkowe koncepcje, które przeglądarka internetowa SNOMED uważa za przestarzałe. Nie jestem pewien dlaczego.
Aby wydrukować nazwy i identyfikatory pojęć podrzędnych, zastąp destinationId
z sourceId
:
select *
from relationshipwithnames r
where r.destinationId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Zauważ, że w rzeczywistości zwraca to szesnaście dodatkowych pojęć, które przeglądarka internetowa SNOMED uważa za przestarzałe. Ponownie, nie mogę znaleźć niezawodnego sposobu na wykluczenie tylko tych szesnastu z wyników.
Stąd zapytania o dziadków i wnuków są proste.