首页 > 编程笔记 > MySQL笔记 阅读:6

Cypher UNWIND语句的用法(附带实例)

UNWIND 语句的作用是将列表转换为多行单个数据。UNWIND 语句也可以创建去重的列表。

UNWIND将一个列表转换成多行数据

UNWIND 语句可以将列表拆解,输出多行数据,每行数据是列表中的一个元素。具体代码如下:
UNWIND [1, 2, 3, NULL ] AS x
RETURN x, 'val' AS y
返回值如下:
│"x" │"y"  │
│1     │"val"│
│2     │"val"│
│3     │"val"│
│null  │"val"│
从返回结果可以看出,原始列表的每个值(包括 null)都被作为单独的行返回。

UNWIND创建去重列表

UNWIND 语句可以与 WITH DISTINCT 语句和 collect() 函数组合,完成不包含重复元素的列表的创建。具体代码如下:
WITH [1, 1, 2, 2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) AS setOfValsy
在上述代码中:
该代码的返回值为如下:
│"setOfVals"│
│[1,2]        │
从返回结果可以看出,原始列表的每个值(包括 null)都被作为单独的行返回。

UNWIND处理返回值为列表的表达式

任何返回列表的表达式都可以与 UNWIND 语句一起使用。假设列表 a 为 [1, 2],列表 b 为 [3, 4],则 a + b 的返回值是一个列表。

表达式 a + b 可以通过 UNWIND 语句对其返回值进行列表拆分,具体代码如下:
WITH [1, 2] AS a,[3, 4] AS b
UNWIND (a + b) AS x
RETURN x
返回值如下:
│"x"│
│1    │
│2    │
│3    │
│4    │

UNWIND处理嵌套列表

每个 UNWIND 语句会进行一次列表的拆分,那么我们可以采用多个 UNWIND 语句来实现嵌套列表的拆分。具体代码如下:
WITH [[1, 2],[3, 4], 5] AS nested
UNWIND nested AS x
UNWIND x AS y
RETURN y
返回值如下:
│"y"│
│1    │
│2    │
│3    │
│4    │
│5    │

UNWIND处理空列表

使用 UNWIND 语句对空列表进行拆分,得到的返回结果将为 0 行,无论其他查询是否有返回结果,具体代码如下:
UNWIND [] AS empty
RETURN empty, 'literal_that_is_not_returned'
上述代码的返回结果显示为空列表

为了避免返回结果为 0 行,我们将空列表用 null 进行替换,具体代码如下:
WITH [] AS list
UNWIND
  CASE
      WHEN list = []
        THEN [null]
      ELSE list
  END AS emptylist
RETURN emptylist
上述代码对列表是否为空进行了判断,如果不为空,则返回列表本身;如果为空,则返回 null。该代码的返回值如下:
│"emptylist"│
│null         │

相关文章