Ann*_*ret 2 postgresql null lateral
我有一个 Postgres 表,其中文本列的内容用“|”分隔。
ID | ... | my_column
-----------------------
1 | ... | text|concatenated|as|such
2 | ... | NULL
3 | ... | NULL
Run Code Online (Sandbox Code Playgroud)
我尝试取消嵌套(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);
Run Code Online (Sandbox Code Playgroud)
或者
如此处建议的:PostgreSQL 用空数组取消嵌套
我得到什么:
ID | ... | my_column
-----------------------
1 | ... | text
1 | ... | concatenated
1 | ... | as
1 | ... | such
Run Code Online (Sandbox Code Playgroud)
但这就是我需要的:
ID | ... | my_column
-----------------------
1 | ... | text
1 | ... | concatenated
1 | ... | as
1 | ... | such
2 | ... | NULL
3 | ... | NULL
Run Code Online (Sandbox Code Playgroud)
小智 7
使用 aLEFT JOIN代替:
SELECT m.id, t.*
from my_table m
left join lateral unnest(string_to_array(my_column, '|')) as t(w) on true;
Run Code Online (Sandbox Code Playgroud)
CASE 语句不需要处理 NULL 值。string_to_array会正确处理它们。
在线示例: http: //rextester.com/XIGXP80374
| 归档时间: |
|
| 查看次数: |
1649 次 |
| 最近记录: |