联合查询 (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
返回合并后的结果,包括重复项。
| 名称 (name) |
|---|
|
|
|
|
|
合并两个查询并移除重复项
如果在 UNION 中不包含 ALL,则会从合并的结果集中移除重复项。
MATCH (n:Actor)
RETURN n.name AS name
UNION
MATCH (n:Movie)
RETURN n.title AS name
返回合并后的结果,不包含重复项。
| 名称 (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
返回合并后的结果,不包含重复项。
| 名称 (name) |
|---|
|
|
|
|
联合后的处理
UNION 子句可以在 CALL 子查询中使用,以便在返回最终输出之前进一步处理合并后的结果。例如,下面的查询计算了 CALL 子查询中 UNION ALL 之后返回的每个 name 属性出现的次数。
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
| 名称 (name) | count |
|---|---|
|
|
|
|
|
|
行:3 |
|
有关更多信息,请参阅 CALL 子查询 → 联合后的处理。
结合使用 UNION 和 UNION ALL仅限 Cypher 25Neo4j 2025.06 引入
要在同一个查询中结合使用 UNION(或 UNION DISTINCT)和 UNION ALL,请将一个或多个相同类型的 UNION 操作括在大括号中。这允许被括起来的查询作为参数,与任何类型的外部 UNION 操作进行合并。
UNION 和 UNION ALL{
MATCH (n:Actor)
RETURN n.name AS name
UNION
MATCH (n:Director)
RETURN n.name AS name
}
UNION ALL
MATCH (n:Movie)
RETURN n.title AS name
返回合并后的结果。
| 名称 (name) |
|---|
|
|
|
|
|