- 问题的具体描述
新人提问:使用match查询可以将查询到的属性值作为参数传给另外一个match语句执行么,如果没有的话有什么其他方法实现么?
MATCH (n) where id(n) == hash(‘113913012347211776’) return n.wcc
MATCH (v:wcc{value:-10805534131917535}) -[e:tolead|toorder|tovin|tolog]- (p) RETURN v,e,p;
MATCH (n) where id(n) == hash(‘113913012347211776’) return n.wcc
MATCH (v:wcc{value:-10805534131917535}) -[e:tolead|toorder|tovin|tolog]- (p) RETURN v,e,p;
MATCH (n) where id(n) == hash(‘113913012347211776’) with n.wcc.value as wcc_value
MATCH (v) where v.wcc.value == wcc_value return v
我使用了with将第一个模式的wcc的属性值作为查询条件传给了下一个match,而且wcc这个属性我也建立了索引,但是用where查询超时了,是语法的问题么,能不能将第一个match的结果传递到第二个match的模式匹配的语句中–MATCH (v:wcc{value:wcc_value}),类似这样的
你现在这样写和MATCH (v:wcc{value:wcc_value})没有区别,效果是一样的。
profile 提供下,另外,版本也提供下
你试试把 n.wcc.value 用 properties(n).value ad wcc_value 看看。
这个改了报的错还是一样,是不是后面引用这个wcc_value出现的问题
MATCH (v:wcc{value:-10805534131917535}) return v
MATCH (v) where v.wcc.value == -10805534131917535 return v
上面这两句话应该是同一个意思吧,不过用where的执行时间会慢很多
wcc 创建过索引么
建了索引
你可以看下二者执行计划的对比,看下哪里耗时有差异,在语句前面加个 profile 就可以得到执行计划了。
好像是一个走了索引,一个没有。
那是我这边建的索引有问题么,还是说用where的话还需要别的什么条件才能使用索引;
另外之前那个传递值的问题也还没有解决,有什么其他建议么
嗯,你试试 match n 改成 match (n:wcc) 看看。可能速度会提升下
感谢回答!速度确实快了,而且用where做值传递查询也可以实现了
对对,我的意思是,你不能把 with 当作一个确定值来写在 match 点里,得用 where
明白了,非常感谢!!!