PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak znaleźć relację z bazy danych Snomed Postgres Sql

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.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Utwórz dwie tablice dla dwóch pól, zachowując porządek sortowania tablic w synchronizacji (bez podzapytania)

  2. Utwórz schemat, jeśli nie istnieje, używając sprężynowego Jpa z hibernacją

  3. Sprawdź, czy wiersz istnieje, czy nie w postgresql

  4. Dlaczego nie mogę używać aliasów kolumn w następnym wyrażeniu SELECT?

  5. PG gem nie instaluje się w aplikacji Rails:Gem::Ext::BuildError:BŁĄD:Nie udało się zbudować natywnego rozszerzenia gem