【问题标题】:Neo4j- finding person whose mother doesn't have siblings and father has siblingsNeo4j-寻找母亲没有兄弟姐妹而父亲有兄弟姐妹的人
【发布时间】:2021-12-09 19:52:42
【问题描述】:

我的查询有一个奇怪的问题。如果我这样写:

MATCH (parentOfMother: Person_kol)-->(mother: Person_kol)-[:MOTHER]->(p: Person_kol)<-[:FATHER]-(father: Person_kol)<--(parentOfFather)-->(:Person_kol) WHERE NOT (:Person_kol)<--(parentOfMother)-->(mother)
RETURN distinct(p.idPerson)

它给了我一个人,他的母亲除了这个人的母亲没有任何孩子,但是这个人的母亲的父亲有很多孩子。

如果我这样写,查询可以正常工作:

MATCH (mother: Person_kol)-[:MOTHER]->(p: Person_kol)<-[:FATHER]-(father: Person_kol)<--(parentOfFather)-->(:Person_kol) WHERE NOT (mother: Person_kol)<--()-->()
RETURN distinct(p.idPerson)

为什么会这样?我看不出查询有什么特别的区别。

【问题讨论】:

    标签: neo4j cypher


    【解决方案1】:

    我认为这与在第一个查询中,在路径/谓词组合中重新访问了一些节点有关。

    我会按如下方式编写您的查询

    MATCH (p:Person_kol)
    WHERE NOT EXISTS((p)<-[:MOTHER]-()<-[:FATHER|MOTHER]-()-[:FATHER|MOTHER]->())
          AND
          EXISTS( (p)<-[:FATHER]-()<-[:FATHER|MOTHER]-()-[:FATHER|MOTHER]->())
    RETURN p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-06
      • 1970-01-01
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多