postgresql - Postgres 10横向未嵌套缺少空值
问题描述
我有一个 Postgres 表,其中文本列的内容用“|”分隔。
ID | ... | my_column
-----------------------
1 | ... | text|concatenated|as|such
2 | ... | NULL
3 | ... | NULL
我试图 unnest(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
解决方案
使用 aLEFT 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
将正确处理它们。
推荐阅读
- reactjs - img 标签有点滞后,显示旧页面图像一两秒钟,然后在 react 中显示新图像
- sharepoint - 团队:您可以将成员添加到团队而不生成“欢迎加入/团队介绍”电子邮件吗?
- mysql - GROUP BY with Count > certain_Number
- angular - 如何将输入框转换为angular8中的下拉菜单
- mysql - 如何在spring boot存储库中查询多对多关系
- php - laravel trio 名称验证 { 全名 } regx
- android - 尝试构建 Android Unity 游戏时出现 Android SDK 错误
- odoo - 升级模块时 xml 文件中的 Odoo 13 错误
- css - Joomla - 两个(主要)内容模块具有最大宽度
- html - 为什么我的 CSS 动画在 Safari 12 中不起作用?