微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Neo4j 中的全外连接

如何解决Neo4j 中的全外连接

Neo4j 是否支持完全外部联接?我阅读了有关 Optional Match 的内容,但我无法让它完全适用于我的场景。

具体来说,我有一个包含 5 种实​​体类型的 Neo4j 模式,其中某些类型可以通过无向连接相互连接。允许的连接是 (Type1,Type2),(Type2,Type3),(Type3,Type4) 和 (Type4,Type5)。连接不是定向的。我想在这些类型之间执行等效的完全外连接。例如如果仅有的连接是 e11:Type1--e21:Type2e22:Type2--e31:Type3e32:Type3--e41:Type4e42:Type4:e51:Type5,那么完整的外连接应该导致:

Type1 Type2 Type3 Type4 Type5
e11 e21
e22 e31​​td>
e32 e41
e42 e51

解决方法

我想不出比查找每个类型对更好的查询,检查它们没有连接到其他类型,然后将每个子查询与 UNION 组合。这会导致一个相当大的查询。也许其他人可以想到一个更动态的查询。

MATCH (n1:Type1)--(n2:Type2)
OPTIONAL MATCH (n2)--(n3:Type3)
OPTIONAL MATCH (n3)--(n4:Type4)
OPTIONAL MATCH (n4)--(n5:Type5)
WITH n1,n2,n3,n4,n5
WHERE n3 IS NULL
RETURN n1,n5

UNION

MATCH (n2:Type2)--(n3:Type3)
OPTIONAL MATCH (n2)--(n1:Type1)
OPTIONAL MATCH (n3)--(n4:Type4)
OPTIONAL MATCH (n4)--(n5:Type5)
WITH n1,n5
WHERE n1 IS NULL AND n4 IS NULL
RETURN n1,n5

UNION

MATCH (n3:Type3)--(n4:Type4)
OPTIONAL MATCH (n3)--(n2:Type2)
OPTIONAL MATCH (n2)--(n1:Type1)
OPTIONAL MATCH (n4)--(n5:Type5)
WITH n1,n5
WHERE n2 IS NULL AND n5 IS NULL
RETURN n1,n5

UNION

MATCH (n4:Type4)--(n5:Type5)
OPTIONAL MATCH (n4)--(n3:Type3)
OPTIONAL MATCH (n3)--(n2:Type2)
OPTIONAL MATCH (n2)--(n1:Type1)
WITH n1,n5

更新:

无需返回 NULL 即可缩短查询:

MATCH (n1:Type1)--(n2:Type2)
WHERE NOT (n2)--(:Type3)
RETURN n1,n2

UNION

MATCH (n1:Type2)--(n2:Type3)
WHERE NOT (n1)--(:Type1) AND NOT (n2)--(:Type4)
RETURN n1,n2

UNION

MATCH (n1:Type3)--(n2:Type4)
WHERE NOT (n1)--(:Type2) AND NOT (n2)--(:Type5)
RETURN n1,n2

UNION

MATCH (n1:Type4)--(n2:Type5)
WHERE NOT (n1)--(:Type3)
RETURN n1,n2

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。