可能是由于UNNEST函数误解了数组的结构导致的。通常,使用UNNEST函数时,需要了解Arrays的结构,并按照正确的方式“unnest”它们。例如,如果Array中包含一个结构体,则需要将其展平为单独的列。
示例代码:
假设有以下数据:
+--------+---------------------+
| user_id| items |
+--------+---------------------+
| 1 |[{"id":1}, {"id":2}] |
| 2 |[{"id":3}, {"id":4}] |
+--------+---------------------+
现在,如果使用如下代码:
SELECT user_id, item.id
FROM `table`, UNNEST(items) as item
那么UNNEST的结果会包含一个名为“id”的struct,而不是一个名为“item”的struct,其结果如下所示:
+--------+------+
| user_id| id |
+--------+------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
+--------+------+
为了解决这个问题,可以将代码改为:
SELECT user_id, item.id as item_id
FROM `table`, UNNEST(items) as item
这样,UNNEST函数返回一个结构体,其中包含“id”字段的值,并且通过别名将其设置为“item_id”字段。现在输出结果符合预期,如下所示:
+--------+---------+
| user_id| item_id|
+--------+---------+
| 1 | 1 |
| 1 | 2 |
| 2 | 3 |
| 2 | 4 |
+--------+---------+