Neo4j CALL 子查询与 UNWIND 返回 0 条记录

问题描述 投票:0回答:1

UNWIND
子查询中使用
CALL
时,我遇到了奇怪的行为。以下查询不返回任何记录:

WITH [] as a, [1] as b, [1,2] as c
CALL {
    WITH a
    UNWIND a as row
    RETURN row as A
}
CALL {
    WITH b
    UNWIND b as row
    RETURN row as B
}
CALL {
    WITH c
    UNWIND c as row
    RETURN row as C
}
RETURN A, B, C

结果:

(no changes, no records)

我认为这是因为

UNWIND
-ing 一个空列表,减少行数为零。

但是,当我将第一个子查询上的

RETURN
子句更改为
collect(row)
时,查询突然返回两条记录(因为列表
c
有 2 个条目):

WITH [] as a, [1] as b, [1,2] as c
CALL {
    WITH a
    UNWIND a as row
    RETURN collect(row) as A
}
CALL {
    WITH b
    UNWIND b as row
    RETURN row as B
}
CALL {
    WITH c
    UNWIND c as row
    RETURN row as C
}
RETURN A, B, C

结果:

╒═══╤═══╤═══╕
│A  │B  │C  │
╞═══╪═══╪═══╡
│[] │1  │1  │
├───┼───┼───┤
│[] │1  │2  │
└───┴───┴───┘

为什么子查询中的

collect()
会改变查询结果?

neo4j cypher
1个回答
0
投票

您对第一个结果的诊断是正确的。第二个是聚合函数行为的结果:即使没有传入行,

collect()
也会返回一行。

请参阅本文了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.