[英]Fetching Value from Json Array Object in Postgres
我是Postgres的新手,所以在創建查詢時遇到了麻煩。
表定義:
id - primary key,
data - JSON
樣本數據:
id data
--------------------------------------------------------------
1 [{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]
我想使用where子句在我的數據列中找到鍵(279864)存在
t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
select id,json_object_keys(json_array_elements(data)) = '279864' from c;
id | ?column?
----+----------
1 | f
1 | f
1 | t
1 | f
(4 rows)
因此您可以使用WHERE EXISTS
或count(*) > 0
或您喜歡的任何其他方式進行檢查...
例如, 使用 bool_or
(如果至少一個為true,則group為true):
t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
, m as (select id,(json_object_keys(json_array_elements(data)) = '279864')j from c)
select id, bool_or(j) from m group by id;
id | bool_or
----+---------
1 | t
(1 row)
簡而言之:
json_array_elements
划分數組進行檢查。 json_object_keys
分割數組元素的鍵 更新為OP是要求“不太復雜”的解決方案,我發布一個猴子入侵,以及:
t=# with c(id,data) as (values(1,'[{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]'::json))
select * from c where data::jsonb::text ~ '(,)|({ )"279863":';
id | data
----+-----------------------------------------------------------------------------------------------------
1 | [{"279863":"500040004","awb_no":"18171917033930"},{"279864":"500040003","awb_no":"18171917033931"}]
(1 row)
這當然很滑,也需要一些解釋:
jsonb
以消除可能的語法自由 {
{和,
案件 將數據列設置為JSONB
,然后可以使用以下命令輕松完成操作:
SELECT * FROM table WHERE data->>'279863' IS NOT NULL;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.