[英]How to search a value in a nested array inside a JSON in Mysql 8?
[英]How to search nested JSON in MySQL
我正在使用 MySQL 5.7+ 和本機 JSON 數據類型。 樣本數據:
[
{
"code": 2,
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
{
"code": 4,
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
問題:如何提取code = 4
的數組?
以下(工作)查詢具有我要提取的數據的 position 和硬編碼的搜索條件:
SELECT JSON_EXTRACT(data_column, '$[0]')
FROM json_data_table
WHERE data_column->'$[1].code' = 4
我嘗試使用通配符 ( data_column->'$[*].code' = 4
) 但我沒有得到任何結果。
SELECT row FROM
(
SELECT data_column->"[*]" as row
FROM json_data_table
WHERE 4 IN JSON_EXTRACT(data_column, '$[*].code')
)
WHERE row->".code" = 4
...雖然如果這不是頂級的未索引對象數組,這將更容易使用。 您可能需要考慮對架構進行一些調整。
注意:
如果您的數據中有多行,指定"$[i]"
將選擇該行,而不是它的聚合。 對於您的數據集, "$[1].code"
將始終評估為該單行中code
的值。
基本上,你是在說:
$
json 集合[1]
集合中的第二個對象。.code
屬性標記為“代碼”。...因為該查詢只會有一個匹配項,所以它總是 eval 為 4 ...
WHERE 4 = 4
既然“代碼”的全部目的是作為一把鑰匙,那就讓它成為鑰匙。
[
"code2":{
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
"code4": {
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
那么,它所需要的只是:
SELECT datacolumn->"[code4]" as code4
FROM json_data_table
如果要獲取 mysql 中的嵌套 json,則列中必須存在有效的 json。 那么你可以試試
JSON_EXTRACT(json_column,'$.level1.$level1.2') from table;
獲取完整示例
這就是你要找的。
SELECT data_column->'$[*]' FROM json_data_table where data_column->'$[*].code' like '%4%'
。
從數組中選擇時,所選數據將有[]
周圍,因此data_column->'$[*].code' = 4
是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.