我是Neo4j新手,我需要查询一个匹配图或任何子图,如下所示:
所以我尝试了可选匹配,但我意识到它不会给我提供所需的结果。这是我之前尝试过的查询。
OPTIONAL MATCH (w:W)-[:WRITES]->(a1:A{name:"A1"})
WITH w,a1
OPTIONAL MATCH (w)-[:WRITES]->(a2:A{name:"A2"})
WITH w,a1,a2
OPTIONAL MATCH (w)-[:WRITES]->(a3:A{name:"A3"})
WITH w,a1,a2,a3
OPTIONAL MATCH (w)-[:WRITES]->(a4:A{name:"A4"})
RETURN w,a1,a2,a3,a4
尽管它是一个可选的匹配,但它仍然是一个逻辑AND匹配与外部连接(在SQL上下文中)
在我的例子中,我在每个匹配中都需要OR和and结果,这意味着它应该匹配上面解释的图的任何子图。
因此,我需要获取结果,如下所示。
MATCH (w:W)-[:WRITES]->(a1:A{name:"A1"})
OR/AND
MATCH (w)-[:WRITES]->(a2:A{name:"A2"})
OR/AND
MATCH (w)-[:WRITES]->(a3:A{name:"A3"})
OR/AND
MATCH (w)-[:WRITES]->(a4:A{name:"A4"})
RETURN w,a1,a2,a3,a4
有没有可能通过Neo4j密码查询来达到我的要求?
我的结果集应该是这样的。
W, A1, A2, A3, A4
{name:w1,....}, {name:A1,....}, {name:A2,....}, {name:A3,....}, {name:A4,....}
{name:w1,....}, null, {name:A2,....}, null, {name:A4,....}
{name:w1,....}, null, null, null, {name:A4,....}
{name:w1,....}, {name:A1,....}, {name:A2,....}, null, null
{name:w1,....}, {name:A1,....}, null, {name:A3,....}, {name:A4,....}
发布于 2018-08-15 20:03:46
如果您希望使用:WRITES关系连接任何:W节点到任何给定的:A节点,则此查询应该有效:
MATCH (w:W)-[:WRITES]->(a:A)
WHERE a.name in ["A1", "A2", "A3", "A4"]
RETURN w, a
编辑
啊,好吧,如果我没看错的话,你想要任何:W节点连接到这些节点中的一个:A节点,但是你想知道节点连接到哪个节点,并且你想要每个节点:A节点都有自己的变量(这是让它变得有点棘手的要求)。
您可以使用上面查询的一些变体来查找w
节点,然后像在原始查询中一样使用w中的可选匹配来获得答案。或者,您可以使用类似于以下查询的内容:
MATCH (a1:A{name:"A1"}), (a2:A{name:"A2"}), (a3:A{name:"A3"}), (a4:A{name:"A4"})
UNWIND [a1, a2, a3, a4] as a
MATCH (w:W)-[:WRITES]->(a)
WITH a1, a2, a3, a4, w, collect(a) as connectedNodes
WITH w, CASE WHEN a1 in connectedNodes THEN a1 ELSE null END as a1,
CASE WHEN a2 in connectedNodes THEN a2 ELSE null END as a2,
CASE WHEN a3 in connectedNodes THEN a3 ELSE null END as a3,
CASE WHEN a4 in connectedNodes THEN a4 ELSE null END as a4
RETURN w, a1, a2, a3, a4
https://stackoverflow.com/questions/51852533
复制相似问题