Neo4j 加入密码查询?
似乎我没有正确理解可选匹配 我有一个始终存在的节点(t)。该节点(t)可以与其他节点(q)、(o)有关系-可能与它们两个或其中一个都有关系 我试着用一句话来表达 “显示节点(t)的所有信息,如果有相关节点(o),则显示所有(o),如果有节点(q),则显示(q)-如果其中一个不可用,则显示您拥有的信息” 我可以做一个比赛和一个可选的比赛,比如Neo4j 加入密码查询?,neo4j,cypher,Neo4j,Cypher,似乎我没有正确理解可选匹配 我有一个始终存在的节点(t)。该节点(t)可以与其他节点(q)、(o)有关系-可能与它们两个或其中一个都有关系 我试着用一句话来表达 “显示节点(t)的所有信息,如果有相关节点(o),则显示所有(o),如果有节点(q),则显示(q)-如果其中一个不可用,则显示您拥有的信息” 我可以做一个比赛和一个可选的比赛,比如 MATCH (t) -- (o) WHERE t.id = "1234" OPTIONAL MATCH (t) -- (q) RETURN q,t,o
MATCH (t) -- (o) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (q)
RETURN q,t,o
当我在(t)和(o)之间有一条路径时,无论我是否有(q),我都会成功。但当我没有(o)和(q)时,我失败了。如果我切换,把(q)放在第一行,把((o)放在第二行,正好相反,我总是松开其中一个
我需要如何查询才能同时获得(o)、(q)或仅仅获得其中一个,而不管它们中有哪一个
编辑
如果
o
和q
具有唯一的ID,则可以使用两个可选数学
来完成此操作。这样:
MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o {id:567})
OPTIONAL MATCH (t) -- (q {id:568})
RETURN q,t,o
如果您只想获取连接到
t
的所有节点的集合:
MATCH (t) WHERE t.id = "1234"
OPTIONAL MATCH (t) -- (o)
RETURN t, COLLECT(o) AS others;
q
和o
之间的区别是什么?您只是想让所有节点都连接到t
(如果有的话),还是想做其他事情?(q)和(o)有不同的标签,对不起,我没有提到。似乎两条路径都以(t)开头,而不是以(q)-(t)和(t)-(o)开头似乎解决了这个问题。查询匹配(t:label1)-(q:label2)其中t.id=1可选匹配(t:label1)-(o:label3)其中t.id=1返回t,q,o工作正常。o
和q
将具有相同的值。此外,这些值将重复(由于笛卡尔积的影响)。我相信t、o和q都有ID,@Balael发布的查询是问题的简化。我建议将这些详细信息放入您的答案中。否则,这没有多大意义。感谢您的支持,不幸的是,当查询启动时,他们还不知道ID。否则,您就可以解开这个谜:)@Balael试一试:MATCH(t)WHERE t.id=“1234”可选匹配(t)-(o)可选匹配(t)-(q)WHERE q o返回q,t,o
您的方法让我再次思考,因为我不确定自己做错了什么-然后我相信我发现了,如果它这么简单的话。我的查询错了,对了,我应该进行匹配(t)--(o)其中t.id=1可选匹配(t)--(q)其中t.id=1返回t,o,q。现在可以了,看起来我的顺序不对,从(t)开始两条路径现在都可以了,没想到这会有什么不同。非常感谢山姆给你的例子。