可选匹配扩展查询



当我向已经工作的查询添加可选匹配项时,选择将展开。

我有一个关于游戏中玩家的结构如下 (玩家)-[得到]->(结果)-[在]->(游戏)

当玩家相互对立时,最终数据中的情况会是这样的。 (player_1)-[得到]->(result_1)-[在]->(游戏)<-[在]-(result_2)-[得到]-(player_2)

给定一个result_1id 的列表,我尝试找到相应的result_2

基本查询

MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)  
WHERE r.id IN [30,32] 
RETURN r, or, g, m

返回我所期望的:

(30)-(
  1. G1)-(或1)
  2. (32)-(
  3. G2)-(或2)

但是游戏也可以处于(可选)匹配中,并且此查询

MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)     
OPTIONAL MATCH (g)<-[:Contains]-(m:Match) 
WHERE r.id IN [30,32] 
RETURN r, or, g, m

返回

(30)-(
  1. G1)-(或1)
  2. (32)-(
  3. G2)-(或2)
  4. (33)-(
  5. G3)-(或3)
  6. (n)-(
  7. gn)-(orn)
  8. 无论发生什么其他事情来匹配结构p-r-g-r-p,但不考虑列表[30,32]

我确实怀疑这与数据的镜像性质有关,因为如果我从返回值中删除r,我仍然会得到 (30) 和 (32) 作为,但我无法弄清楚为什么以及如何停止它。

我试图在可选之前添加一个 With,但这没有区别。

WHERE子句修改紧接前面的[OPTIONAL] MATCHWITH子句。

您需要移动WHERE子句,使其紧跟在初始MATCH之后,以便它按预期限制r。喜欢这个:

MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)     
WHERE r.id IN [30,32] 
OPTIONAL MATCH (g)<-[:Contains]-(m:Match) 
RETURN r, or, g, m

最新更新