解决UNNEST空数组时丢失数据的SQL查询问题
解决UNNEST空数组时丢失行的问题
这个问题我之前也碰到过!核心原因是你用的UNNEST默认是交叉连接(CROSS JOIN),当implies是空数组的时候,没有可连接的元素,那一行就被过滤掉了。要保留所有原始行,得换成左连接(LEFT JOIN)来关联UNNEST的结果,具体方案如下:
可行的查询语句
SELECT name, COALESCE(implies, '') AS implies FROM your_table LEFT JOIN UNNEST(implies) AS implies
为什么这个方案有效
- LEFT JOIN 保留原始行:左连接会保留
your_table中的所有行,哪怕UNNEST(implies)没有返回任何元素(比如Foo的空数组)。此时空数组对应的implies字段会是NULL。 - COALESCE 转换空值:用
COALESCE(implies, '')把NULL转换成空字符串,完美匹配你期望的输出格式(Foo对应的implies为空)。如果不需要转换,直接保留NULL也可以,去掉这个函数就行。
验证输出结果
执行上述语句后,你会得到完全符合预期的结果:
name, implies Foo, Bar, Foo Baz, Foo Baz, Bar
内容的提问来源于stack exchange,提问作者Rick Viscomi
相关产品推荐
相关产品推荐

