在PostgreSQL中查詢JSON陣列中的元素
簡介
SQL能夠有效地處理JSON資料的儲存。本文將重點放在如何在PostgreSQL中查詢儲存在JSON物件中的陣列。
查詢JSON巢狀數組
假設一個名為「data」的JSON欄位包含一個物件陣列。任務是從「objects」陣列中檢索所有與特定「src」值相符的記錄。
使用Lateral Join和Unnesting查詢
Postgres提供了json_array_elements()函數來展開JSON陣列。將其與lateral join結合使用,可以獲得所需的結果:
<code class="language-sql">SELECT * FROM reports r, json_array_elements(r.data->'objects') obj WHERE obj->>'src' = 'foo.png';</code>
此查詢為每個JSON陣列元素建立一個lateral join,允許obj列表示陣列中的每個物件。
PostgreSQL 9.4 的替代方法
對於PostgreSQL 9.4及更高版本,您可以利用改進的JSON處理功能:
<code class="language-sql">SELECT * FROM reports WHERE data->'objects' @> '[{"src":"foo.png"}]';</code>
在此查詢中,「@>」運算子檢查陣列是否包含指定的物件。請記住將搜尋詞括在方括號中以符合JSON數組結構。
總結
要查詢JSON類型中的數組,您可以使用json_array_elements()展開數組並執行lateral join。對於PostgreSQL 9.4及更高版本,您可以使用增強的“@>”運算符以及匹配的GIN索引來進行高效匹配。這兩種方法都允許您根據陣列元素值檢索特定記錄。
以上是如何在 PostgreSQL 中查詢 JSON 陣列中的元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!