3

我们如何在密码中做到这一点?
n 个父母 p1, p2, p3.... pnm 个孩子 c1, c2,c3... cm
假设c1派生自 (child of) p1,p2 and p3并且c2派生自 (child of) p1, p2 and p3
给定c1我们可以找到c2吗?(从与 c1 相同的父节点派生的节点)
一个子节点可以有 1...n 个父节点。

4

1 回答 1

8

实际上,几周前我在这里问了一个非常相似的问题,然后我得到的答案也对你有用,只需稍作调整。

START c1=node(*), c2=node(*)
MATCH c1-[:ChildOf]->parent<-[:ChildOf]-c2 
WITH c1, c2, count(parent) AS parentsFound
WHERE length(c1-[:ChildOf]->()) = parentsFound
  AND length(c2-[:ChildOf]->()) = parentsFound
  AND c1 <> c2
RETURN c1, c2

注意:大概你会有一个更好的方式来选择你的c1and 而c2不是使用node(*).

逐行查询的逻辑:

  1. 从所有孩子开始c1c2
  2. 查找和parent共享的所有 sc1c2
  3. parent统计找到的 shared 数量
  4. 确保找到的 s 数与已找到的sparent总数相匹配。parentc1
  5. 确保找到的 s 数与已找到的sparent总数相匹配。parentc2
  6. (可选)不要费心将节点与自己进行比较
  7. 返回结果!
于 2013-03-15T19:33:30.833 回答