neo4j图数据库,如何合并数据集?union/union all有何区别?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
根据节点的不同标签进行数据查询,这是在neo4j
世界里面的基本操作。但是,如果想合并两个不同标签的数据呢?其中一个可能的解决方案就是union
,它可以把两个不同的match
数据合并到一起。还有个类似的操作叫做union all
,两者有什么区别呢?这个也是本文中要探讨的问题。
大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文讲述在neo4j
图数据库中,如何使用union
语句和union all
语句。测试环境:win10
,neo4j社区版@4.4.6
,java@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
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
MATCH (n:Cat) RETURN n.name AS name
UNION ALL
MATCH (n:Dog) RETURN n.name AS name
可以看到,这里有两个叫做“小黑”的宠物,一个是猫猫,一个是狗狗。
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
MATCH (n:Cat) RETURN n.name AS name
UNION
MATCH (n:Dog) RETURN n.name AS name
这里因为字段名字都叫name
,所以不使用as
也是可以的。例如:
MATCH (n:Cat) RETURN n.name
UNION
MATCH (n:Dog) RETURN n.name
相关文档
- https://newsn.net/say/neo4j-optional-match.html
- https://newsn.net/say/neo4j-match-node.html
- https://newsn.net/say/neo4j-match-relationship.html
- https://neo4j.com/docs/cypher-manual/current/clauses/union/
综述
本文需要注意的是:字段名要一致,不一致就不能union
了。如果使用union
就会给数据去重,使用union all
就不会去重。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。