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 |
---|
|
|
|
|
联合后处理
以下查询使用一个空的 变量范围子句: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
name | count |
---|---|
|
|
|
|
|
|
行数:3 |
有关更多信息,请参阅 CALL
子查询 → 联合后处理。