Postgresql 匹配至少一个对象值不为null的JSONB行

Postgresql 匹配至少一个对象值不为null的JSONB行,postgresql,Postgresql,在我们的数据库中,我们有如下数据集: +----+-------------------------------+ | id | stuff | +----+-------------------------------+ | 1 | {} | +----+-------------------------------+ | 2 | {"a": "something", "b": null}

在我们的数据库中,我们有如下数据集:

+----+-------------------------------+
| id | stuff                         |
+----+-------------------------------+
| 1  | {}                            |
+----+-------------------------------+
| 2  | {"a": "something", "b": null} |
+----+-------------------------------+
| 3  | {"c": null, "d": null}        |
+----+-------------------------------+
在本例中,我只想匹配id=2的值,原因是对象中至少有一个值不是null

如何使用PostgreSQL实现这一点

我知道一个人可以做一些事情,比如去哪里{}但这当然只检查空对象 或者类似的东西->>'a'不是空的,但问题是对象中的键列表不是硬编码的,可以是任何东西 使用函数示例:

此查询由Abelisto提出,请参见注释在更大的数据集上应更有效:

select t.*
from my_table t
where exists (
    select 1
    from jsonb_each_text(jdata)
    where value is not null);

“{a:something,b:null,c:other one}”事实上,我记住了类似于where exists的东西,当值不为null时,从jsonb_each_textjdata中选择1:o IMO使用distinct并不是最理想、最优雅的解决方案。但是最短的解决方案;毫无疑问,您的查询速度更快。我很想知道横向连接而不是交叉连接是否会导致不同的执行plan@HaleemurAli-这是一种横向连接,只是一种不同的表示形式。
select t.*
from my_table t
where exists (
    select 1
    from jsonb_each_text(jdata)
    where value is not null);