【问题标题】:Join two tables in Neo4j, noSQL在 Neo4j、noSQL 中加入两个表
【发布时间】:2018-08-06 12:48:06
【问题描述】:

我想解决的查询是:

“来院2年以上的糖尿病患者名单”

有两个表,“PATIENTS_INFO”和“HOSPITAL_INFO”都有一个共同的属性,“PATIENT_ID”

我试过这个查询,但没有用:

MATCH (p:PATIENTS_INFO)->(h:HOSPITAL_INFO) WHERE p.years > 2 AND h.Category = 'Diabetes'RETURN p;

有人可以帮我加入这两个表并解决这个查询吗?

【问题讨论】:

  • 你说的是tables这正常吗?或者你想说label?您的查询是否给了您一些东西(错误或零结果)?
  • 听起来您在询问基本的 Cypher 语法。 Stack Overflow 通常不适用于可以通过易于访问的文档回答的基本问题。请以Cypher documentation 开头,您可以随时使用Cypher refcard 快速参考。
  • 如果你想获得一些有意义的帮助,我认为你需要提供一个有代表性的数据样本

标签: sql neo4j nosql


【解决方案1】:

您的架构需要更复杂。您有患者和医院的节点。听起来您至少需要一个额外的节点,例如访问或入场。它可能是带有 ID、日期、访问类型(门诊或住院)和诊断属性的访问。您还需要这些节点之间的边/关系,例如: (p:Patient)-[pv:PatientVisit]-(v:Visit)-[hv:HospVisit]->(h:Hospital)

那么你可以这样查询:

match  (p:Patient{ID:xxx})-[pv:PatientVisit]-(v:Visit)-[:HospVisit]->(h:Hospital) 
 with p where min(v.date)<**** 
 with p,collect(v.ID) as VIDs
match (p:Patient{ID:xxx})-[pv:PatientVisit]-(v:Visit)-[:HospVisit]->(h:Hospital)
 where v.ID in VIDs and v.diagnosis='Diabetes'
return p,v,h

***有几种方法可以处理日期差异,APOC 函数可能是最好的。

初始匹配会查找与任何给定医院有两年关系的患者的所有患者就诊,并收集就诊 ID。第二个得到他们所有的访问和这些医院。

如果您只需要患者列表而不是所有详细信息,则可以修改此设置。

您应该考虑使用标准代码集进行诊断,例如 ICD10-CM 或 SNOMED。还有医院标识符,例如 NPI。您可能想查看 AHRQ 入院标准数据集,了解它们如何处理这些数据的复杂性:https://www.hcup-us.ahrq.gov/nisoverview.jsp

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    相关资源
    最近更新 更多