有什么区别
OPTIONAL MATCH clauseA, clauseB
Run Code Online (Sandbox Code Playgroud)
和
OPTIONAL MATCH clauseA
OPTIONAL MATCH clauseB
Run Code Online (Sandbox Code Playgroud)
根据我使用的形式,我会得到不同的行为.
例如:
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
Run Code Online (Sandbox Code Playgroud)
设计用于返回节点; 它是来自节点的传入关系; 它是传出的关系和节点.
我有一个由节点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
Run Code Online (Sandbox Code Playgroud)
然后按预期填充n_to和link_n_out列.
第一种形式将其视为必须完全匹配的单个扩展模式.
第二种形式将它们视为不同的可选模式,并且可以分别匹配这两种模式.
因此,当您考虑它正在做什么时,您的结果才有意义 - 如果找不到整个OPTIONAL MATCH模式,则它与任何可选MATCH模式都不匹配.