使用MATCH RETURN时返回多个结果DISTINCT无效

请教各位大神,我在使用MATCH匹配路径时,如果RETURN多个变量,那么返回的行数会变成最多的那一列数量,也就是DISTINCT失效
如下面这条语句,如果我只RETURN V,那么因为起点是一条,加上DISTINCT,返回的就只有一条数据,如果RETURN V3则返回19条,如果两个一起返回,则V的数量也扩充到了19条,v明明只需要一条却扩充成了19条,传输数据量放大19倍,影响客户端IO速度

请问是我语句使用不到位吗,还是特性就是这样的?

本来的目的:从v开始N度查询,返回N度内子图,点边携带部分轻量级属性,类似企查查等应用,不能用GET SUBGRAPH,因为只需要返回部分属性,但是目前看来GET SUBGRAPH只能选择要么不返回属性,要么全部返回,上百条字段全部返回没有必要

MATCH (v:player) -[r1:follow]- (v2) - [r2:follow]-(v3) WHERE id(v)=="player100" RETURN  DISTINCT  v ,v3

如果两个一起返回,则V的数量也扩充到了19条


如果我只RETURN V,那么因为起点是一条,加上DISTINCT,返回的就只有一条数据

如果RETURN V3则返回19条

你想v1和v3做个合并,再distinct吗?
可以参考一下 Example2 https://docs.nebula-graph.io/3.1.0/3.ngql-guide/8.clauses-and-options/unwind/#return_a_list_with_distinct_items

1 个赞

V1,V3合并这个学到了,感谢!

不过我举例v1,v3是想说distinct无效,我本质问题是想通过match返回路径下去重后的vertex和relations来拿到子图,类似于GET SUBGRAPH,但是因为GET SUBGRAPH只能WITH PROP拿到全部属性无法筛选字段,请问match能达到 "返回路径下去重后的vertex和relations来拿到子图"的功能吗?

1 个赞

可能理解有误。
我看下下,[v1,v3] 这些行没有出现重复。
您可以具体一下吗?哪行和哪行重复了?

就是distinct V1,V3的时候,我理解应该是V1和V3都是去重的结果,V1只有一个起始点,去重后不应该是1个吗,但是一起DISTINCT的话返回的是多个。是因为MATCH的到的是路径path吗,所以一行对应一个path的V1和V3,有num(v3)个path,所以展示num(v3)个v1是吗,是这个原因的话为什么只DISTINCT v1的时候展示的是一行呢,让人有点迷惑

这里的distinct是对查询结果去重(如:[v1,v2] ),不是只对v1去重。

1 个赞

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。