PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana menemukan hubungan dari Snomed Postgres Sql Database

Menurut NHS CT Browser , yang mungkin tidak dapat diakses dari mana-mana, 93880001 memiliki tiga orang tua:

  • Tumor ganas paru-paru (gangguan)
  • Neoplasma ganas primer organ intratoraks (gangguan)
  • Neoplasma ganas primer saluran pernapasan (gangguan)

dan 31 anak:

  • Karsinoma parenkim paru (gangguan)
  • Hemangioendothelioma epiteloid paru (gangguan)
  • Limfoma non-Hodgkin pada paru-paru (gangguan)
  • Kanker paru-paru non-sel kecil (gangguan)
  • dan seterusnya...

Cara untuk menemukan tingkat hierarki yang lebih tinggi dan lebih rendah adalah dengan menggunakan relationship_f.sourceid dan relationship_f.destinationid . Namun, tabel mentah tidak ramah pengguna jadi saya sarankan membuat beberapa tampilan. Saya telah mengambil kode dari file Oracle .sql di ini Repo GitHub.

Pertama, kami membuat tampilan dengan ID konsep dan nama pilihan:

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

Kemudian kita membuat tampilan hubungan:

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;

Jadi kueri untuk mencetak nama dan id dari tiga konsep induk adalah:

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

Perhatikan bahwa ini sebenarnya mengembalikan tiga konsep tambahan, yang menurut browser SNOMED online sudah usang. Saya tidak yakin mengapa.

Untuk mencetak nama dan id konsep turunan, ganti destinationId dengan sourceId :

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

Perhatikan bahwa ini sebenarnya mengembalikan enam belas konsep tambahan, yang menurut browser SNOMED online sudah usang. Sekali lagi, saya tidak dapat menemukan cara yang dapat diandalkan untuk mengecualikan hanya enam belas ini dari hasil.

Dari sini, pertanyaan untuk mendapatkan kakek-nenek dan cucu sangatlah mudah.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mungkinkah mengubah desain tabel PostgreSQL menggunakan LibreOffice Base?

  2. Menyiapkan Play 2.4.0 dengan Postgres dan HikariCP menghasilkan kesalahan konfigurasi

  3. PostgreSQL di Docker - pg_hba.conf untuk mengizinkan akses dari host ke container

  4. Cara mengatur zona waktu untuk Postgres 9.4 secara permanen

  5. Alternatif dinamis untuk pivot dengan CASE dan GROUP BY