组合查询 (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 子查询 → 联合后处理。