多列UNNEST关联OFFSET报错:Duplicate alias offset found问题
解决UNNEST关联多列时的OFFSET匹配报错问题
问题核心
你要按逗号拆分多列,通过OFFSET关联保证拆分后各列的对应关系,但关联超过2列时SQL报错,直接原因是未给所有需要关联的UNNEST子句添加with offset声明,且连续JOIN的语法不规范。
错误SQL的问题点
原SQL里第三个unnest(split(Colm_D)) Colm_D没加with offset,导致无法通过using(offset)和前两个UNNEST的OFFSET字段关联,这就是报错的根源。
修正后的SQL
select Colm_A, Colm_B, Colm_C, Colm_D from your_table cross join unnest(split(Colm_B)) Colm_B with offset join unnest(split(Colm_C)) Colm_C with offset using(offset) join unnest(split(Colm_D)) Colm_D with offset using(offset);
关键说明
- 所有需要通过OFFSET关联的UNNEST必须显式加
with offset,才能生成用于匹配的OFFSET字段 - 用
using(offset)让拆分后的各列按相同偏移位置一一对应,保证每行数据的关联性 - 第一个UNNEST用
cross join(或省略关键字的隐式交叉连接),后续通过JOIN关联其他拆分列
验证结果
基于你提供的源表:
| Colm_A | Colm_B | Colm_C | COL_D |
|---|---|---|---|
| 1 | Fish | F | H |
| 2 | Dog,cat | D,C | G,T |
执行修正后的SQL,会得到预期输出:
| Colm_A | Colm_B | Colm_C | Colm_D |
|---|---|---|---|
| 1 | Fish | F | H |
| 2 | Dog | D | G |
| 2 | Cat | C | T |
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

