我正在尝试返回值为空的单行的所有列名。之后我可以解析整行,但很好奇是否有我可以利用的功能。
我可以使用 row_to_json()
和 json_strip_nulls
返回一个包含值为 not null 的键值对的 JSON 对象,其中条件引用 a单个唯一行:
SELECT json_strip_nulls(row_to_json(t))
FROM table t where t.id = 123
是否有一个函数或简单的方法来完成这个过程的逆过程,返回所有具有空值的键(列名)?
最佳答案
您需要一个主键或唯一列。在示例中 id
是唯一的:
with my_table(id, col1, col2, col3) as (
values
(1, 'a', 'b', 'c'),
(2, 'a', null, null),
(3, null, 'b', 'c')
)
select id, array_agg(key) as null_columns
from my_table t
cross join jsonb_each_text(to_jsonb(t))
where value is null
group by id
id | null_columns
----+--------------
2 | {col2,col3}
3 | {col1}
(2 rows)
key
和 value
是函数 jsonb_each_text() 返回的默认列。
请参阅 JSON Functions and Operators在文档中。
关于sql - 查询值为空的单行的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101250/