查询语句match使用求教

我想用match关键词查询多个边的不同属性,例如:
match p=(v)-[e:e1{relation:1}]-(v2) where id(v) in [ids] return p,e limit 100;
这个语句能够正常执行,但是我想加入多个边,例如:
match p=(v)-[e:e1{relation:1} |:e2 |:e3]-(v2) where id(v) in [ids] return p,e limit 100;
就会报错,错误信息:
1004,SystaxError:systax error near |e2
再者,怎么在这条语句上加入深度查询,比如step查询2步或者3步。
希望多多指教,感谢感谢!

match p=(v)-[e:e1{relation:1} |e2 |e3]-(v2) where id(v) in [ids] return p,e limit 100;

这个会报错么,

是的,报错,也是1004,SystaxError:systax error near |e2

能具体描述下的您的需求吗?
上述的语句这样写应该是可以的:

match p=(v)-[e:e1|e2|e3{relation:1}]-(v2) where id(v) in [ids] return p,e limit 100;

按照您的提议,我试了一下,报了跟之前不一样的错:props must be evaluable,不确定是不是需要设置什么。
我的使用场景是:根据指定点,边(多个)及边属性,查询点的N度关系有哪些,要去除悬挂边。
使用match主要是为了去除悬挂边,其他能符合要求的查询都可以的。

感谢您指导。

在语法里写成{relation:3*x+1}这种形式的语句就会报props must be evaluable
match p=(v)-[e:e1|e2|e3{relation:3*x+1}]-(v2) where id(v) in [ids] return p,e limit 100;

匹配定长路径可以看这一章节

1 个赞

大神,这是我原来的语句,


现在想把属性的查询加进去,您给指导一下吧
我还是困惑在 根据多边的属性查询 上面
属性值relation:abc-123,这样的
多谢多谢

relation这个属性在所有边上都有吗?

是的,我们强制要求,每个边上都要有这个属性

abc-123是一个字符串吗?如果是的话,就按这种写法就可以吧

match p=(v)-[e:e1|e2|e3{relation:"abc-123"}]-(v2) where id(v) in [ids] return p,e 

不同边,属性值不一样,比如e1{relation:“abc-123”}|e2{relation:“abc-456”},这样子的

或许可以这样写,虽然会有些奇怪。。。 :joy:

match (a)-[e:e1|e2]->(b) where (type(e) == "e1" and e.relation == "abc-123") or (type(e) == "e2" and e.relation == "abc-456") return 1

好的,我试一下,还有想请问一下,如果在这条语句上加上深度,要怎么加呢? 比如要查3步这样子

大神,这个语句可以用的,太感谢了,还得麻烦您指导一下,就是刚刚那个语句,如果想查询2步,3步,要怎么加啊

您可以查看这一小节

好的,感谢!

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