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

Snowflake中如何横向展平长度不同的两数组?新手求助

如何在Snowflake中展平数组并保留所有元素(无匹配时显示Null)

当然可以实现你的需求!你当前的SQL用逗号连接LATERAL FLATTEN,这相当于隐式内连接,只会保留两个数组索引完全匹配的记录。要展示所有客户编号,同时在没有对应城市时显示NULL,只需要把内连接改成左连接即可。

修改后的SQL语句

SELECT 
    c.customer_id, 
    c.last_name, 
    f.value AS cust_num, 
    f1.value AS city 
FROM customers AS c
-- 先展平客户编号数组,保留所有元素
LEFT JOIN LATERAL FLATTEN(input => c.customer_number) f
-- 左连接城市数组,按索引匹配,无匹配时返回Null
LEFT JOIN LATERAL FLATTEN(input => c.cities) f1 ON f.index = f1.index
ORDER BY customer_id;

关键说明

  1. LEFT JOIN LATERAL FLATTEN:左连接会保留左侧(客户编号展平后的所有行),当右侧(城市数组)没有对应索引的元素时,f1.value会自动填充为NULL。
  2. 索引匹配条件ON f.index = f1.index:确保客户编号和城市按数组中的位置对应,避免产生无意义的笛卡尔积。

比如对于customer_id=104的行,如果它的customer_number数组有3个元素,而cities数组只有2个元素,那么查询结果中第三行的city字段就会显示NULL,同时完整保留全部3个客户编号。

内容的提问来源于stack exchange,提问作者Rvn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:55:24