我有一个可以返回潜在大量行的查询。尽可能快地至关重要。
有没有办法根据匹配的内容更改返回的内容?以下是查询的简化版本:
MATCH p=(x)-[*]->(y) WHERE x.n="a"
WITH p,y OPTIONAL MATCH (y)<-[]-(z)
RETURN DISTINCT p,z
如果OPTIONAL MATCH找到了结果,那么就不需要大集合&#39; p&#39;被退回。
我想对结果做些什么:
IF z has results THEN RETURN z ELSE RETURN p
谢谢!
答案 0 :(得分:1)
此查询应该有效(它基本上产生两种结果):
MATCH p=(x)-[*]->(y) WHERE x.n="a"
OPTIONAL MATCH (y)<--(z)
RETURN DISTINCT
CASE WHEN z IS NULL THEN {p: p} ELSE {z: z} END AS res;
请注意,如果你有大量数据,像[*]
这样的无界模式可能需要很长时间(或永远不会完成,或内存不足)。
答案 1 :(得分:0)
您可以使用coalesce()功能。它将返回传递给它的表达式列表中的第一个非null值。尝试:
MATCH p=(x)-[*]->(y) WHERE x.n="a"
WITH p,y
OPTIONAL MATCH (y)<-[]-(z)
WITH coalesce(z, p) as result
RETURN DISTINCT result