You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j中CALL子查询使用UNWIND返回0条记录,改用collect()后结果变化的原因咨询

Neo4j中CALL子查询使用UNWIND返回0条记录,改用collect()后结果变化的原因咨询

我在Neo4j的CALL子查询里使用UNWIND时遇到了一个奇怪的现象,下面这个查询居然返回了0条记录:

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一个空列表时,会把查询的行数缩减到0。

但当我把第一个子查询的RETURN语句改成collect(row)之后,查询突然返回了2条记录(应该是因为列表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()会改变整个查询的结果呢?

备注:内容来源于stack exchange,提问作者zirkelc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 12:48:10