PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да намерите връзка от Snomed Postgres Sql база данни

Според NHS CT браузър , който може да не е достъпен отвсякъде, 93880001 има трима родители:

  • Злокачествен тумор на белия дроб (разстройство)
  • Първично злокачествено новообразувание на интраторакални органи (заболяване)
  • Първично злокачествено новообразувание на дихателните пътища (нарушение)

и 31 деца:

  • Карцином на белодробния паренхим (разстройство)
  • Епителиоиден хемангиоендотелиом на белия дроб (нарушение)
  • Неходжкинов лимфом на белия дроб (разстройство)
  • Недребноклетъчен рак на белия дроб (разстройство)
  • и така нататък...

Начинът да намерите по-високи и по-ниски нива на йерархията е да използвате relationship_f.sourceid и relationship_f.destinationid . Суровите таблици обаче не са удобни за потребителя, така че бих предложил да направите някои изгледи. Взех кода от .sql файловете на Oracle в това GitHub repo.

Първо правим изглед с идентификатори на концепции и предпочитани имена:

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

След това правим преглед на връзките:

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;

Така че една заявка за отпечатване на имената и идентификаторите на трите родителски концепции би била:

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

Имайте предвид, че това всъщност връща три допълнителни концепции, които онлайн браузърът SNOMED смята за остарели. Не съм сигурен защо.

За да отпечатате имената и идентификаторите на дъщерните концепции, заменете destinationId с sourceId :

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

Имайте предвид, че това всъщност връща шестнадесет допълнителни концепции, които онлайн браузърът SNOMED смята за остарели. Отново не мога да намеря надежден начин да изключа само тези шестнадесет от резултатите.

Оттук заявките за получаване на баби и дядовци и внуци са лесни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Инсталирайте PL/Java 1.5.2 в PostgreSQL 11

  2. Как да надстроите PostgreSQL 11 до PostgreSQL 12 с нулев престой

  3. PostgreSQL изтрива всички записи освен най-старите

  4. Индексиране ando:GIN индекси

  5. Как да прехвърля json масив към текстов масив?