与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果
UNION
UNION ALL
UNION子句
它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。
限制:
结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。
UNION子句语法
<MATCH Command1>
UNION
<MATCH Command2>
语法说明:
注意 -
如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。
示例:我们将采取一个银行应用程序的节点:信用卡式和借记卡解释UNION子句
信用卡式节点数据:
第1步 -打开Neo4j的数据浏览器
第2步 -在数据浏览器的美元提示符处键入以下命令。
查看 CreditCard
MATCH (cc:CreditCard) RETURN cc
点击“下载CSV”来查看结果
紧接着,咱们查看DebitCard
MATCH (dc:DebitCard) RETURN dc
点击“下载CSV”来查看结果
相互对比一下,咱们可以发现他们的所有内容相似,咱们使用UNION 直接查询,将会有什么情况发生呢?
MATCH (cc:CreditCard) RETURN cc.id,cc.number
UNION
MATCH (dc:DebitCard) RETURN dc.id,dc.number
结果显示为:
这表明,这两个查询应具有相同的列名。
首先查询有:cc.id,cc.number。
第二个查询有:dc.id,dc.number。
这里既有信用卡式和借记卡具有相同的属性名:身份证和号码,但他们有不同的节点名称前缀。这就是为什么UNION命令显示此错误消息。为了避免这种错误,Neo4j的CQL提供“AS”子句。
于是,对于union语句的使用,应当在保证各个属性均一致且合并时,应当改为同一名称的基础下,为如下:
MATCH (cc:CreditCard)
RETURN cc.id as id,cc.number as number,cc.name as name,
cc.valid_from as valid_from,cc.valid_to as valid_to
UNION
MATCH (dc:DebitCard)
RETURN dc.id as id,dc.number as number,dc.name as name,
dc.valid_from as valid_from,dc.valid_to as valid_to
结果如图: