Postgres 10横向不必要的缺失空值

时间:2018-09-11 17:03:43

标签: postgresql null lateral

我有一个Postgres表,其中文本列的内容用'|'分隔。

ID | ... | my_column
-----------------------
1  | ... | text|concatenated|as|such
2  | ... | NULL
3  | ... | NULL

我试图取消嵌套(string_to_array())此列以分隔行,这行得通,但是排除了我的NULL值(>所有条目的90%)。我尝试了几种方法:

 SELECT * from "my_table", lateral unnest(CASE WHEN "this_column" is NULL
 THEN NULL else string_to_array("this_column", '|') END);

如此处建议:PostgreSQL unnest with empty array

我得到的是

ID | ... | my_column
-----------------------
1  | ... | text
1  | ... | concatenated
1  | ... | as
1  | ... | such

但这就是我所需要的:

ID | ... | my_column
-----------------------
1  | ... | text
1  | ... | concatenated
1  | ... | as
1  | ... | such
2  | ... | NULL
3  | ... | NULL

1 个答案:

答案 0 :(得分:2)

改为使用LEFT JOIN

SELECT m.id, t.*
from my_table m
   left join lateral unnest(string_to_array(my_column, '|')) as t(w) on true;

CASE语句无需处理NULL值。 string_to_array将正确处理它们。

在线示例:http://rextester.com/XIGXP80374