Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql PostgresJSONB:检查数组中是否包含所有键*_Postgresql_Jsonb - Fatal编程技术网

Postgresql PostgresJSONB:检查数组中是否包含所有键*

Postgresql PostgresJSONB:检查数组中是否包含所有键*,postgresql,jsonb,Postgresql,Jsonb,声明我可以使用?&检查JSONB对象的键是否包含数组中的所有元素。我是否需要检查JSONB对象中的所有键是否都包含在给定数组中 这样做一个查询 select my_jsonb_column from my_table where my_jsonb_column *contained_by* array['a', 'b', 'c']; 将产生如下结果,其中键是给定数组的子集 {'a': 1, 'b': 2} {'a': 1, 'b': 2, 'c': 3} 多亏@abelisto的建议,我想

声明我可以使用
?&
检查JSONB对象的键是否包含数组中的所有元素。我是否需要检查JSONB对象中的所有键是否都包含在给定数组中

这样做一个查询

select my_jsonb_column 
from my_table
where my_jsonb_column *contained_by* array['a', 'b', 'c'];
将产生如下结果,其中键是给定数组的子集

{'a': 1, 'b': 2}
{'a': 1, 'b': 2, 'c': 3}

多亏@abelisto的建议,我想出了这个办法,而且似乎奏效了

select *
from my_table
where array(select jsonb_object_keys(my_json_column)) <@ array['a', 'b', 'c'];
选择*
从我的桌子上

where array(选择jsonb_object_keys(我的json_列))提示:
array(选择jsonb_object_keys(我的jsonb_列))
谢谢您的回复!因此,我根据您的建议发布了一个解决方案,它是有效的,但我不明白为什么有必要在
数组
函数中设置
select
。显然,没有它它是不行的。如果你能给我指一些参考资料来解释,那就太好了。谢谢<代码>数组()
这里不是常规函数,而是。在我看来,子查询和结果不需要两种不同形式的构造函数。