我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

根据节点的不同标签进行数据查询,这是在neo4j世界里面的基本操作。但是,如果想合并两个不同标签的数据呢?其中一个可能的解决方案就是union,它可以把两个不同的match数据合并到一起。还有个类似的操作叫做union all,两者有什么区别呢?这个也是本文中要探讨的问题。

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - neo4j-union-hero
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-1)

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文讲述在neo4j图数据库中,如何使用union语句和union all语句。测试环境:win10neo4j社区版@4.4.6java@11.0.14

测试数据集

这个文章里面,苏南大叔采用了一个自己的数据集。语句如下:

CREATE (a:Dog {name: '虎子',color:'yellow'}),
       (b:Dog {name: '小黑',color:'black',good:'true'}),
       (c:Dog {name: '二赖子',color:'white',type:'lovely'}),
       (d:Cat {name: '老许',color:'black'}),
       (e:Cat {name: '小黑',color:000000}),
       (a)-[:Friend]->(b),
       (a)-[:Friend]->(c),
       (a)-[:Friend]->(d),
       (b)-[:Friend]->(e),
       (c)-[:Friend]->(d);

如果您需要清空数据库,可以使用:

MATCH (n) DETACH DELETE n

显示所有数据,可以使用:

MATCH (n) return n

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - 数据集
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-2)

union all不去重

猫猫狗狗都是宠物,那么,现在想知道都有哪些宠物呢?

MATCH (n:Cat) RETURN n.name AS name,'catty' as type
UNION ALL 
MATCH (n:Dog) RETURN n.name AS name,'doggy' as type

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - union-all-1
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-3)

MATCH (n:Cat) RETURN n.name AS name
UNION ALL 
MATCH (n:Dog) RETURN n.name AS name

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - union-all-2
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-4)

可以看到,这里有两个叫做“小黑”的宠物,一个是猫猫,一个是狗狗。

union去重

两个宠物复用了同一个名字“小黑”,现在需求变成:现在宠物都有什么哪些名字?这里不使用union all,而使用union

MATCH (n:Cat) RETURN n.name AS name,'catty' as type
UNION
MATCH (n:Dog) RETURN n.name AS name,'doggy' as type

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - union-1
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-5)

MATCH (n:Cat) RETURN n.name AS name
UNION
MATCH (n:Dog) RETURN n.name AS name

苏南大叔:neo4j图数据库,如何合并数据集?union/union all有何区别? - union-2
neo4j图数据库,如何合并数据集?union/union all有何区别?(图6-6)

这里因为字段名字都叫name,所以不使用as也是可以的。例如:

MATCH (n:Cat) RETURN n.name
UNION
MATCH (n:Dog) RETURN n.name

相关文档

综述

本文需要注意的是:字段名要一致,不一致就不能union了。如果使用union就会给数据去重,使用union all就不会去重。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   neo4j    cypher