使用 WHERE 返回 Neo4j 问题中的堂兄弟

Returning cousins in Neo4j problem with WHERE

我必须进行一个 Cypher 查询,该查询应该是 return 一个人的堂兄弟(兄弟姐妹,brothers/sisters 的孩子)。它几乎可以正常工作,但问题是当我想过滤掉写 WHERE p2.personId<>27003 的人 (27003) (precious) 的孩子时,它也会删除人的母亲 (missing)

我做错了什么?

我的密码查询:

MATCH (p: Person_kol)<-[]-(parent: Person_kol) WHERE p.idPerson=27003
WITH p,parent
MATCH (p3: Person_kol)<-[]-(p2: Person_kol)<-[]-(parent: Person_kol)
WHERE p2.idPerson<>27003
RETURN p,parent,p3,p2

我的第一场比赛只是 return 给定 ID 的人 his/her parent。

第二个匹配只搜索brothers/sisters和his/her孩子(我知道p2也包括id=27003和his/her孩子的人,所以我想过滤他们out,但是我的“WHERE”也去掉了那个人的妈妈(第2张图)

图片:

  1. (没有 WHERE 子句)

  1. (带 WHERE)

您的第二个匹配子句要求 parent 有一个孙子 p3,其 parent 不是 precious。由于 missing 在满足该条件的第一张照片中没有任何孙子,因此她被从结果中过滤掉了。

如果你想包括 parents 而不管他们是否有符合条件的孙子,你可以做一个 optional match.

MATCH (p: Person_kol)<--(parent: Person_kol) WHERE p.idPerson=27003
OPTIONAL MATCH (p3: Person_kol)<--(p2: Person_kol)<--(parent: Person_kol)
WHERE p2.idPerson<>27003
RETURN p,parent,p3,p2