PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách tìm mối quan hệ từ Cơ sở dữ liệu Snomed Postgres Sql

Theo NHS CT Browser , có thể không truy cập được từ mọi nơi, 93880001 có ba cha mẹ:

  • Khối u ác tính của phổi (rối loạn)
  • Ung thư ác tính nguyên phát của các cơ quan trong lồng ngực (rối loạn)
  • Ung thư ác tính nguyên phát của đường hô hấp (rối loạn)

và 31 người con:

  • Ung thư biểu mô nhu mô phổi (rối loạn)
  • U máu biểu mô ở phổi (rối loạn)
  • Ung thư phổi không Hodgkin (rối loạn)
  • Ung thư phổi không phải tế bào nhỏ (rối loạn)
  • và v.v. ...

Cách để tìm các cấp cao hơn và thấp hơn của hệ thống phân cấp là sử dụng relationship_f.sourceidrelationship_f.destinationid . Tuy nhiên, các bảng thô không thân thiện với người dùng vì vậy tôi khuyên bạn nên thực hiện một số chế độ xem. Tôi đã lấy mã từ tệp Oracle .sql trong this GitHub repo.

Đầu tiên, chúng tôi tạo một chế độ xem với ID khái niệm và tên ưu tiên:

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

Sau đó, chúng tôi xem xét các mối quan hệ:

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;

Vì vậy, một truy vấn để in ra tên và id của ba khái niệm mẹ sẽ là:

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

Lưu ý rằng điều này thực sự trả về ba khái niệm bổ sung, mà trình duyệt SNOMED trực tuyến cho rằng đã lỗi thời. Tôi không chắc tại sao.

Để in ra tên và id của các khái niệm con, hãy thay thế destinationId với sourceId :

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

Lưu ý rằng điều này thực sự trả về mười sáu khái niệm bổ sung, mà trình duyệt SNOMED trực tuyến cho rằng đã lỗi thời. Một lần nữa, tôi không thể tìm ra cách đáng tin cậy để chỉ loại trừ mười sáu thứ này khỏi kết quả.

Từ đây, các truy vấn tìm ông bà và cháu rất dễ hiểu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ẩn danh PostgreSQL theo yêu cầu

  2. Postgres CHỌN ... ĐỂ CẬP NHẬT trong các chức năng

  3. Cách khác để truyền varbit thành int? Và bigint?

  4. pgp Dự đoán - Phân tích dự đoán trong PostgreSQL

  5. Cách kết nối Jboss-as-7.1.1 với Postgresql