当我向已经运行的查询中添加可选匹配项时,选择范围就会扩大。
关于游戏玩家的结构如下 (玩家)-[获得]->(结果)-[参与]->(游戏)
当玩家互相反对时,最终数据中的内容将看起来像这样 (player_1)-[got]->(result_1)-[in]->(游戏)<-[in]-(result_2)-[got]-(player_2)
给出一个结果_1 ID的列表,我试图找到相应的结果_2
基本查询
MATCH (r:Result)-[:In]->(g:Game)<-[:In]-(or:Result)
WHERE r.id IN [30,32]
RETURN r, or, g, m
完全返回我的期望:
但是游戏也可以(可选)匹配,并且可以查询
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
返回
我确实怀疑这与数据的镜像性质有关,因为如果我从返回的值中删除 r ,我仍然会以的形式返回(30)和(32)或,但我无法弄清楚为什么以及如何阻止它。
我试图在可选选项之前添加一个With,但是没有区别。
答案 0 :(得分:2)
WHERE
子句修改紧接的[OPTIONAL] MATCH
或WITH
子句。
您需要移动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