首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Neo4j循环查询中匹配为逻辑AND/OR

在Neo4j循环查询中匹配为逻辑AND/OR
EN

Stack Overflow用户
提问于 2018-08-15 11:27:28
回答 1查看 548关注 0票数 1

我是Neo4j新手,我需要查询一个匹配图或任何子图,如下所示:

所以我尝试了可选匹配,但我意识到它不会给我提供所需的结果。这是我之前尝试过的查询。

代码语言:javascript
复制
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结果,这意味着它应该匹配上面解释的图的任何子图。

因此,我需要获取结果,如下所示。

代码语言:javascript
复制
MATCH (w:W)-[:WRITES]->(a1:A{name:"A1"})

OR/AND

代码语言:javascript
复制
MATCH (w)-[:WRITES]->(a2:A{name:"A2"})

OR/AND

代码语言:javascript
复制
MATCH (w)-[:WRITES]->(a3:A{name:"A3"})

OR/AND

代码语言:javascript
复制
MATCH (w)-[:WRITES]->(a4:A{name:"A4"})
RETURN w,a1,a2,a3,a4

有没有可能通过Neo4j密码查询来达到我的要求?

我的结果集应该是这样的。

代码语言:javascript
复制
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,....}
EN

回答 1

Stack Overflow用户

发布于 2018-08-15 20:03:46

如果您希望使用:WRITES关系连接任何:W节点到任何给定的:A节点,则此查询应该有效:

代码语言:javascript
复制
MATCH (w:W)-[:WRITES]->(a:A)
WHERE a.name in ["A1", "A2", "A3", "A4"]
RETURN w, a

编辑

啊,好吧,如果我没看错的话,你想要任何:W节点连接到这些节点中的一个:A节点,但是你想知道节点连接到哪个节点,并且你想要每个节点:A节点都有自己的变量(这是让它变得有点棘手的要求)。

您可以使用上面查询的一些变体来查找w节点,然后像在原始查询中一样使用w中的可选匹配来获得答案。或者,您可以使用类似于以下查询的内容:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51852533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档