Neo4j CQL -(14) -UNION联合

时间:2022-12-29 18:01:11

与SQL一样,Neo4j CQL有两个子句,将两个不同的结果合并成一组结果

UNION
UNION ALL

UNION子句

它将两组结果中的公共行组合并返回到一组结果中。 它不从两个节点返回重复的行。

限制:

结果列类型和来自两组结果的名称必须匹配,这意味着列名称应该相同,列的数据类型应该相同。

UNION子句语法

<MATCH Command1>
   UNION
<MATCH Command2>

语法说明:
Neo4j CQL -(14) -UNION联合

注意 -

如果这两个查询不返回相同的列名和数据类型,那么它抛出一个错误。

示例:我们将采取一个银行应用程序的节点:信用卡式和借记卡解释UNION子句

信用卡式节点数据:
第1步 -打开Neo4j的数据浏览器
第2步 -在数据浏览器的美元提示符处键入以下命令。

查看 CreditCard

MATCH (cc:CreditCard) RETURN cc

点击“下载CSV”来查看结果
Neo4j CQL -(14) -UNION联合

紧接着,咱们查看DebitCard

MATCH (dc:DebitCard) RETURN dc

点击“下载CSV”来查看结果
Neo4j CQL -(14) -UNION联合

相互对比一下,咱们可以发现他们的所有内容相似,咱们使用UNION 直接查询,将会有什么情况发生呢?

MATCH (cc:CreditCard) RETURN cc.id,cc.number
UNION
MATCH (dc:DebitCard) RETURN dc.id,dc.number

结果显示为:
Neo4j CQL -(14) -UNION联合


这表明,这两个查询应具有相同的列名。
首先查询有: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

结果如图:
Neo4j CQL -(14) -UNION联合

本文参考:https://www.w3cschool.cn/neo4j/neo4j_cql_union.html