sql - 查询值为空的单行的列名?

标签 sql postgresql columnname

我正在尝试返回值为空的单行的所有列名。之后我可以解析整行,但很好奇是否有我可以利用的功能。

我可以使用 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)    

keyvalue 是函数 jsonb_each_text() 返回的默认列。 请参阅 JSON Functions and Operators在文档中。

关于sql - 查询值为空的单行的列名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54101250/

相关文章:

sql - 查找所有具有特定艺术家姓名轨道的播放列表?

python - Pandas 将新列名分配为字符串

r - 我想用循环更改列名

oracle - getColumnName() 返回别名 Oracle

c# - SQL 事务提交使连接处于损坏状态 (c#)

python - 在 Django 查询中收到 "missing FROM-clause"编程错误

python-3.x - 使用 psycopg2 将 git 修订散列 (SHA-1) 写入 PostgreSQL 数据库

mysql - INSERT ... ON DUPLICATE UPDATE - 锁定等待超时

sql - 加入并计算 2 个日期之间的不同值

mysql - 选择除另一个表之外的查询