我努力想弄明白下面的区别是什么:
match (n:Crew)-[:KNOWS]-()
with n,collect(DISTINCT n) AS mygroup
match (m:Crew)
where not m in mygroup
return count(*)
以及:
match (n:Crew)-[:KNOWS]-()
with collect(DISTINCT n) AS mygroup
match (m:Crew)
where not m in mygroup
return count(*)
在第一种情况下,WITH
通过了什么,在第二种情况下,WITH
通过了什么?以及它对答案有何影响。
2条答案
按热度按时间polhcujo1#
第一个选项将同时返回
n
和mygroup
,而第二个选项将只返回mygroup
。n
在查询的其余部分中不使用,因此不需要。使用第一个选项不仅是多余的,而且根据cardinality的概念,它可能还会多次运行查询的其余部分。因为行数将是x1M4N1X的计数,其可能大于x1M5N1X的计数。rxztt3cl2#
这就是区别。
在“with n,collect(DISTINCT n)AS mygroup”中,您将获得每个船员和包含该船员的集合。它类似于SQL group by子句,其中您按n分组,然后聚合不同的n。例如;
同时,如果在查询中使用collect(DISTINCT n)而不使用n,则它将简单地聚合所有不同的n。因此,结果只是一组crews(crewA...到crewZ)。
然后返回有多少节点不属于该组(返回count(*))。
我有一个建议,这个查询要好得多。把你的查询改成这个。它会给予你同样的结果,关于有多少个机组节点没有关系(:KNOWS)。它会计算没有关系(:KNOWS)的节点数(m),