在
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()
会改变查询结果?