De acordo com o Navegador NHS CT , que pode não estar acessível de todos os lugares, 93880001 tem três pais:
- Tumor maligno do pulmão (distúrbio)
- Neoplasia maligna primária de órgãos intratorácicos (distúrbio)
- Neoplasia maligna primária do trato respiratório (distúrbio)
e 31 filhos:
- Carcinoma do parênquima pulmonar (distúrbio)
- Hemangioendotelioma epitelióide do pulmão (distúrbio)
- Linfoma não Hodgkin do pulmão (distúrbio)
- Câncer de pulmão de células não pequenas (distúrbio)
- e assim por diante...
A maneira de encontrar níveis superiores e inferiores da hierarquia é usar
relationship_f.sourceid
e relationship_f.destinationid
. No entanto, as tabelas brutas não são amigáveis, então sugiro fazer algumas visualizações. Peguei o código dos arquivos Oracle .sql em isto
repositório do GitHub. Primeiro, fazemos uma visualização com IDs de conceito e nomes preferenciais:
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';
Em seguida, fazemos uma visão das relações:
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;
Portanto, uma consulta para imprimir os nomes e ids dos três conceitos pai seria:
select *
from relationshipwithnames r
where r.sourceId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Observe que isso realmente retorna três conceitos extras, que o navegador SNOMED online considera obsoletos. Não sei por quê.
Para imprimir os nomes e ids dos conceitos filhos, substitua
destinationId
com sourceId
:select *
from relationshipwithnames r
where r.destinationId = '93880001'
and r.active = '1'
and r.typeIdName = 'Is a';
Observe que isso realmente retorna dezesseis conceitos extras, que o navegador SNOMED online considera obsoletos. Novamente, não consigo encontrar uma maneira confiável de excluir apenas esses dezesseis dos resultados.
A partir daqui, as consultas para obter avós e netos são diretas.