如何在Snowflake中用LATERAL JOIN实现SQL的OUTER APPLY功能?
在Snowflake中用LATERAL JOIN替代OUTER APPLY实现行转多行需求
Snowflake不支持OUTER APPLY,但可以通过LEFT JOIN LATERAL完全实现等价效果——包括保留原表所有行(对应OUTER APPLY的外部连接特性),同时为原表每行生成指定的多行数据。
针对你需要为原表每行生成3行数据的需求,直接将OUTER APPLY替换为LEFT JOIN LATERAL即可,具体实现如下:
完整SQL示例
假设你的原表名为your_table,包含Name、Surname、Age列:
SELECT t.*, s.Point, s.Column2, s.Column3 FROM your_table t LEFT JOIN LATERAL ( VALUES ('Point', t.Name, NULL), ('Surname', NULL, t.Surname), ('Age', t.Age, NULL) ) s (Point, Column2, Column3) ON TRUE;
核心说明
LEFT JOIN LATERAL等价于OUTER APPLY,会保留原表的每一行,哪怕VALUES子句无匹配数据ON TRUE是因为VALUES子句是为原表每行生成固定的3行,无需额外连接条件- 如果不需要保留原表无匹配的行(等价于
CROSS APPLY),可将LEFT JOIN LATERAL改为INNER JOIN LATERAL
内容的提问来源于stack exchange,提问作者Python_Hey
相关产品推荐
相关产品推荐

