之间有什么区别
OPTIONAL MATCH clauseA, clauseB
和
OPTIONAL MATCH clauseA
OPTIONAL MATCH clauseB
根据我使用的形式,我会得到不同的行为。
例如:
START n=node(111)
OPTIONAL MATCH n<-[links_n_in]-(n_from),n-[links_n_out]->(n_to)
RETURN n,COLLECT(n_from) AS n_from,COLLECT(links_n_in) AS links_n_in,COLLECT(n_to) AS n_to,COLLECT(links_n_out) AS links_n_out
用于返回节点;它是来自节点的传入关系;它是传出的关系和节点。
我有一个由节点111组成的测试图,节点111有4个传出关系,每个关系指向同一节点(我有其他测试用例,其中111指向不同的节点)。执行上述查询仅返回列'n'中的节点111。 'n_from','links_n_in','n_to','links_n_out'的列为空。
如果我将查询修改为:
START n=node(111)
OPTIONAL MATCH n<-[links_n_in]-(n_from)
OPTIONAL MATCH n-[links_n_out]->(n_to)
RETURN n,COLLECT(n_from) AS n_from,COLLECT(links_n_in) AS links_n_in,COLLECT(n_to) AS n_to,COLLECT(links_n_out) AS links_n_out
然后按预期填充n_to和link_n_out列。
答案 0 :(得分:5)
第一个表单将其视为必须完全匹配的单个扩展模式。
第二种形式将它们视为不同的可选模式,并且可以分别匹配这两种模式。
所以你的结果是有意义的,当你考虑它正在做什么时 - 如果找不到整个可选的MATCH模式,它就不会与任何可选的MATCH模式相匹配。