Redshift中将逗号分隔值转多行报错:unnest语法错误求助
逗号分隔值转多行报错:unnest语法错误问题
你尝试用以下SQL将表中逗号分隔的data字段拆分为多行:
CREATE table a_table ( id int, data varchar ); INSERT INTO a_table VALUES (1, 'Apple,Orance'), (2, 'Apple,Grapes'), (3, 'Juice,Apple,Cucumber'); SELECT * FROM a_table; SELECT id, unnest(string_to_array(data,',')) FROM a_table; SELECT *, unnest(string_to_array(data, ',')) FROM a_table;
执行时出现错误:
ERROR: syntax error at or near "unnest" LINE 1: SELECT id, unnest(string_to_array(data,','))
问题原因
你的写法在PostgreSQL 9.3及更早版本中不被支持——旧版本不允许在SELECT列表中直接调用返回集合的函数(比如unnest),这类函数必须放到FROM子句中作为集合源使用。
正确写法
1. 隐式横向连接(兼容旧版本)
SELECT a.id, elem FROM a_table a, unnest(string_to_array(a.data, ',')) elem;
2. 显式LATERAL JOIN(PostgreSQL 9.3+推荐)
这种写法逻辑更清晰,也支持更复杂的关联场景:
SELECT a.id, elem FROM a_table a LATERAL unnest(string_to_array(a.data, ',')) elem;
3. 保留原表所有列的拆分写法
如果需要同时获取原表全部字段和拆分后的元素:
SELECT a.*, elem FROM a_table a LATERAL unnest(string_to_array(a.data, ',')) elem;
内容的提问来源于stack exchange,提问作者Patthebug
相关产品推荐
相关产品推荐

