在 MySQL 中,在 JSON 物件陣列中尋找特定節點可能具有挑戰性。為了解決這個問題,您可以考慮使用 JSON_SEARCH 和 JSON_CONTAINS 函數。然而,組合這些函數來簡化查詢並不總是可行的。
MySQL 8.0 提供了一個使用 JSON_TABLE() 函數的解決方案,該函數從 JSON 文件建立一個虛擬派生表,有效地將其視為行和列。這使您能夠對 JSON 資料執行選擇和投影等操作。
為了進行演示,讓我們將範例資料插入表中:
<code class="sql">create table mytable ( mycol json ); insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';</code>
您現在可以使用JSON_TABLE() 來建立一個虛擬表:
<code class="sql">SELECT j.* FROM mytable, JSON_TABLE(mycol, '$[*]' COLUMNS ( race VARCHAR(10) PATH '$.Race', strength INT PATH '$.strength' )) AS j;</code>
這將產生以下結果:
race | strength |
---|---|
Orc | 14 |
Knight | 7 |
要檢索特定種族的強度,您可以使用WHERE 子句:
<code class="sql">SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]' COLUMNS ( race VARCHAR(10) PATH '$.Race', strength INT PATH '$.strength' )) AS j WHERE j.race = 'Orc';</code>
這將傳回以下結果:
strength |
---|
14 |
但是,這種方法需要您在查詢中指定屬性字段,這可能不適合屬性定義未知的資料集。
以上是如何在MySQL中有效率地從JSON數組中提取特定鍵值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!