0

我有这个密码查询...

start u = node(251)
match u -[I:PREFERENCE]-> i,
      i <-[Q:CATEGORY|IS_IN*0..]- q <-[C:JOB|LOCATION]- o,
      o -[J:JOB]-> j -[JL:LABEL]-> jl,
      o -[P:LOCATION]-> p -[PL:LABEL]-> pl
where jl.lang = "en"
  and pl.lang = "en"
return distinct o.title, o.description, type(C) as PreferenceType,
      jl.name as Job, pl.name as Location

...这还不是很有效。问题是,如果我跳过标签关系,它会返回预期的结果。但是,如果我把它留在那里,结果取决于最后两个匹配子句(o -[J:JOB]-> j -[JL:LABEL]-> jlo -[P:LOCATION]-> p -[PL:LABEL]-> pl)的顺序。

如果LOCATION是最后一个,我只会收到基于 LOCATION 的结果,如果我放在JOB最后一个位置,只会收到基于 JOB 的结果。

最后,我想要正确的结果(包括基于 LOCATION 和 JOB 的结果),但我也想知道为什么这有什么不同?

我在1.9.M03这里使用 Neo4j

4

1 回答 1

0

这可行,但我更喜欢没有的版本WITH

start u = node(251)
match u -[I:PREFERENCE]-> i,
      i <-[Q:CATEGORY|IS_IN*0..]- q <-[C:JOB|LOCATION]- o
 with distinct o, C
match o -[J:JOB]-> j -[JL:LABEL]-> jl,
      o -[P:LOCATION]-> p -[PL:LABEL]-> pl
where jl.lang = "en"
  and pl.lang = "en"
return o.title, o.description, type(C) as PreferenceType,
      jl.name as Job, pl.name as Location
于 2013-09-12T13:39:23.893 回答