组合查询 (UNION
)
UNION
将两个或多个查询的结果组合成一个单一的结果集,其中包含联合中任何查询所属的所有行。
所有使用 UNION
组合的查询,其列数和列名必须相同。
要保留所有结果行,请使用 UNION ALL
。仅使用 UNION
(或 UNION DISTINCT
)将组合并从结果集中移除重复项。
如果
有关详细信息,请参阅包含 |
示例图
以下图用于下面的示例
要重新创建该图,请对空的 Neo4j 数据库运行以下查询
CREATE (johnny:Actor {name: 'Johnny Depp'}),
(sarah:Actor {name: 'Sarah Jessica Parker'}),
(ed:Actor&Director {name: 'Ed Wood'}),
(edWoodMovie:Movie {title: 'Ed Wood'}),
(johnny)-[:ACTED_IN]->(edWoodMovie),
(sarah)-[:ACTED_IN]->(edWoodMovie)
组合两个查询并保留重复项
使用 UNION ALL
组合两个查询的结果。
MATCH (n:Actor)
RETURN n.name AS name
UNION ALL
MATCH (n:Movie)
RETURN n.title AS name
返回组合后的结果,包括重复项。
姓名 |
---|
|
|
|
|
|
组合两个查询并移除重复项
不在 UNION
中包含 ALL
时,将从组合结果集中移除重复项。
MATCH (n:Actor)
RETURN n.name AS name
UNION
MATCH (n:Movie)
RETURN n.title AS name
返回组合后的结果,不含重复项。
姓名 |
---|
|
|
|
|
UNION DISTINCT
也可以通过在 UNION
中显式包含 DISTINCT
来实现移除重复项。UNION DISTINCT
关键字是作为 Cypher® GQL 一致性的一部分引入的,其功能与使用简单的 UNION
相同。
MATCH (n:Actor)
RETURN n.name AS name
UNION DISTINCT
MATCH (n:Movie)
RETURN n.title AS name
返回组合后的结果,不含重复项。
姓名 |
---|
|
|
|
|
联合后处理
下面的查询使用了空的变量作用域子句:CALL () { … } (在 Neo4j 5.23 中引入)。如果您使用的是旧版 Neo4j,请改用 CALL { … } 。有关更多信息,请参阅CALL 子查询 → 导入变量。 |
CALL () {
MATCH (a:Actor)
RETURN a.name AS name
UNION ALL
MATCH (m:Movie)
RETURN m.title AS name
}
RETURN name, count(*) AS count
ORDER BY count
姓名 | 计数 |
---|---|
|
|
|
|
|
|
行数: 3 |
有关更多信息,请参阅CALL
子查询 → 联合后处理。