我有这样的分层组织结构:
OrgNode(3)-[HAS_PARENT]->OrgNode(2)-[HAS_PARENT]->OrgNode(1)
我想要一个cypher查询,它给出了给定任何节点ID的顶级组织:
topOrg(3) = OrgNode(1)
topOrg(2) = OrgNode(1)
topOrg(1) = OrgNode(1)
当起始节点至少有一个父节点时,我能够编写查询以返回顶级组织。但是,当同一查询中没有父链接时,我无法弄清楚如何返回起始节点:
start n=node(3)
match (n)-[:PARENT*]->(m)-[r?:PARENT]->()
WHERE r is null
return m
答案 0 :(得分:1)
您可以使用UNION运算符将结果与处理没有父项的起始节点的另一个查询的结果相结合,
start n=node(3)
match (n)-[:PARENT*]->(m)-[r?:PARENT]->()
WHERE r is null
return m as result
UNION
Start n=node(3)
Match n
Where not(n-[:PARENT]-())
Return n as result