我似乎无法正确理解OPTIONAL MATCH。
我有一个始终存在的节点(t)。该节点(t)可以与其他节点(q),(o)有关系 - 可能与它们两者或仅仅是其中之一。
我试图在一个声明中找到类似
的声明“显示node(t)的所有信息,如果有相关节点(o),那么还有(o)所有,如果有节点(q),那么也为(q) - 如果其中一个没有显示你有什么“
我可以选择匹配和可选匹配(如
)MATCH (t) -- (o) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (q)
RETURN q,t,o
当我在(t)和(o)之间有一条路径时,无论我是否有(q),我都会成功。但是当我没有(o)而且有(q)时我失败了。如果我切换并将(q)放在第一行,((o)在第二行,反之亦然,我总是松开其中一个。
我怎样才能查询得到(o),(q)或其中一个,无论它们中哪一个存在?
答案 0 :(得分:2)
如果您只想获取连接到t
的所有节点的集合:
MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o)
RETURN t, COLLECT(o) AS others;
答案 1 :(得分:1)
"显示node(t)的所有信息以及是否存在相关节点 (o)然后也是(o)的全部,如果有节点(q)那么也是(q) - 如果其中一个不可用,则显示您拥有的内容"
如果o
和q
具有唯一ID,则可以使用两个OPTIONAL MATH
执行此操作。这样:
MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o {id:567})
OPTIONAL MATCH (t) -- (q {id:568})
RETURN q,t,o