最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用MySQL JSON查詢篩選嵌套字段的值方式

 更新時(shí)間:2026年01月08日 10:42:35   作者:當(dāng)年明月思古今  
本文介紹了如何在MySQL中查詢JSON字段中的特定數(shù)據(jù),通過使用JSON_EXTRACT和JSON_UNQUOTE函數(shù),可以方便地從嵌套的JSON結(jié)構(gòu)中提取所需的信息,此外,還討論了性能優(yōu)化和數(shù)據(jù)規(guī)范化建議,以提高查詢效率

在日常開發(fā)中,隨著項(xiàng)目需求的不斷復(fù)雜化,許多表字段可能會(huì)存儲(chǔ) JSON 格式的數(shù)據(jù)。

例如,我們有一張site_device表,其中有一個(gè)名為detail的字段,保存了設(shè)備的詳細(xì)信息。這些信息存儲(chǔ)為 JSON 數(shù)據(jù),如下所示:

{
  "deviceType": "ammeter",
  "techParams": {
    "name": "202501241556",
    "deviceNo": "202501241556",
    "gatewayNo": "1829047495952388098",
    "ownership": "top",
    "dataReport": "1"
  },
  "deviceBrand": "HUAWEI",
  "deviceModel": "test",
  "modelConfigId": "1871021778273325058"
}

我們想要查詢出 ownershiptop 的設(shè)備。ownership 字段嵌套在 techParams 中,因此我們需要使用 MySQL 提供的 JSON 函數(shù)來實(shí)現(xiàn)查詢。

1. 理解 JSON 數(shù)據(jù)的層級結(jié)構(gòu)

在這個(gè)例子中,JSON 的結(jié)構(gòu)可以分解為:

  • deviceType:在 JSON 頂層。
  • techParams:是一個(gè)嵌套對象,里面包含了 ownership 等字段。
  • ownership:目標(biāo)字段,位于 techParams 內(nèi)。

我們需要從 detail 中提取出 techParams.ownership 的值。

2. 使用 MySQL JSON 查詢函數(shù)

MySQL 提供了一系列函數(shù)用于處理 JSON 數(shù)據(jù):

  • JSON_EXTRACT(json_doc, path):從 JSON 中提取值。
  • JSON_UNQUOTE(json_val):去掉 JSON 提取值的引號,返回純文本。

對于本例來說,我們可以用以下語句來篩選出 ownershiptop 的記錄:

SELECT *
FROM site_device
WHERE JSON_UNQUOTE(JSON_EXTRACT(detail, '$.techParams.ownership')) = 'top';

語法解釋

JSON_EXTRACT(detail, '$.techParams.ownership')

提取 detailtechParams 對象內(nèi)的 ownership 值。

JSON_UNQUOTE(...)

去掉 JSON 提取結(jié)果的引號,使其變?yōu)槠胀ㄗ址?/p>

WHERE ... = 'top'

篩選出 ownership 值等于 top 的記錄。

3. 示例數(shù)據(jù)和運(yùn)行結(jié)果

假設(shè) site_device 表中的數(shù)據(jù)如下:

iddetail
1{"deviceType": "ammeter", "techParams": {"ownership": "top", "dataReport": "1"}, "deviceBrand": "HUAWEI"}
2{"deviceType": "ammeter", "techParams": {"ownership": "bottom", "dataReport": "1"}, "deviceBrand": "HUAWEI"}
3{"deviceType": "ammeter", "techParams": {"ownership": "top", "dataReport": "1"}, "deviceBrand": "HUAWEI"}

運(yùn)行查詢后,結(jié)果為:

iddetail
1{"deviceType": "ammeter", "techParams": {"ownership": "top", "dataReport": "1"}, "deviceBrand": "HUAWEI"}
3{"deviceType": "ammeter", "techParams": {"ownership": "top", "dataReport": "1"}, "deviceBrand": "HUAWEI"}

4. 注意事項(xiàng)

JSON 路徑表達(dá)式 $

JSON 路徑表達(dá)式 $ 表示 JSON 的根,嵌套字段用 . 分隔。例如:$.techParams.ownership。

性能優(yōu)化

如果數(shù)據(jù)量較大,可以通過為 JSON 字段創(chuàng)建虛擬列(Generated Column)并加索引來提升查詢性能。

ALTER TABLE site_device
ADD COLUMN ownership VARCHAR(50) GENERATED ALWAYS AS (JSON_UNQUOTE(JSON_EXTRACT(detail, '$.techParams.ownership'))) STORED,
ADD INDEX idx_ownership (ownership);

數(shù)據(jù)規(guī)范化

如果 JSON 數(shù)據(jù)中的字段經(jīng)常被查詢,考慮將這些字段拆分到獨(dú)立的數(shù)據(jù)庫列中,以提高查詢效率。

5. 總結(jié)

MySQL 提供了強(qiáng)大的 JSON 查詢功能,使得我們可以方便地處理結(jié)構(gòu)化的 JSON 數(shù)據(jù)。在本文中,我們通過 JSON_EXTRACTJSON_UNQUOTE 函數(shù),成功篩選出了目標(biāo)字段值為特定值的記錄。同時(shí),結(jié)合性能優(yōu)化建議,可以讓你的 JSON 查詢更高效。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • MySQL尾部空格處理方法詳解

    MySQL尾部空格處理方法詳解

    這篇文章主要介紹了MySQL尾部空格處理方法詳解的相關(guān)資料,通過創(chuàng)建合適的索引來實(shí)現(xiàn)區(qū)分有尾部空格和沒有尾部空格的字符串,需要的朋友可以參考下
    2023-07-07
  • sql如何使用group by分組,同時(shí)查詢其它字段

    sql如何使用group by分組,同時(shí)查詢其它字段

    文章介紹了使用SQL的GROUP BY進(jìn)行分組查詢時(shí)的一些規(guī)則和技巧,主要強(qiáng)調(diào)了在SELECT后面的字段要么是聚合函數(shù)的一部分,要么必須包含在GROUP BY子句中,此外,文章還討論了如何在GROUP BY時(shí)查詢其他字段,通過使用MAX或MIN函數(shù)來實(shí)現(xiàn)
    2024-12-12
  • mysql刪除無用用戶的方法實(shí)現(xiàn)

    mysql刪除無用用戶的方法實(shí)現(xiàn)

    本文主要介紹了mysql刪除無用用戶的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-03-03
  • MySQL自定義序列數(shù)的實(shí)現(xiàn)方式

    MySQL自定義序列數(shù)的實(shí)現(xiàn)方式

    這篇文章主要介紹了MySQL自定義序列數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 使用java處理字符串公式運(yùn)算的方法

    使用java處理字符串公式運(yùn)算的方法

    本篇文章介紹了,使用java處理字符串公式運(yùn)算的方法。需要的朋友參考下
    2013-04-04
  • MySQL之使用UNION和UNION ALL合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集

    MySQL之使用UNION和UNION ALL合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集

    這篇文章主要介紹了MySQL之使用UNION和UNION ALL合并兩個(gè)或多個(gè)SELECT語句的結(jié)果集,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • linux 安裝 mysql 8.0.19 詳細(xì)步驟及問題解決方法

    linux 安裝 mysql 8.0.19 詳細(xì)步驟及問題解決方法

    這篇文章主要介紹了linux 安裝 mysql 8.0.19 詳細(xì)步驟,本文給大家列出了常見問題及解決方法,通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • MySQL中如何進(jìn)行SQL調(diào)優(yōu)舉例詳解

    MySQL中如何進(jìn)行SQL調(diào)優(yōu)舉例詳解

    這篇文章主要介紹了SQL調(diào)優(yōu)的幾種方法,包括合理設(shè)計(jì)索引,避免SELECT*,避免在SQL中進(jìn)行函數(shù)計(jì)算等操作,避免使用%LIKE,注意聯(lián)合索引需滿足最左匹配原則,不要對無索引字段進(jìn)行排序操作,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • 淺談選擇mysql存儲(chǔ)引擎的標(biāo)準(zhǔn)

    淺談選擇mysql存儲(chǔ)引擎的標(biāo)準(zhǔn)

    本文介紹了如何選擇mysql存儲(chǔ)引擎,從存儲(chǔ)引擎的介紹、幾個(gè)常用引擎的特點(diǎn)三個(gè)方面進(jìn)行講解,感興趣的小伙伴們可以參考一下
    2015-07-07
  • mysql 索引的基礎(chǔ)操作匯總(四)

    mysql 索引的基礎(chǔ)操作匯總(四)

    這篇文章主要為大家詳細(xì)介紹了mysql 索引的基礎(chǔ)操作匯總,涵蓋了創(chuàng)建和查看索引、刪除索引等操作,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

繁昌县| 仙桃市| 乌鲁木齐县| 安西县| 都江堰市| 迁西县| 项城市| 福清市| 佛学| 株洲市| 栾城县| 海原县| 布尔津县| 宜黄县| 新兴县| 太湖县| 凤凰县| 武宣县| 抚顺县| 洛浦县| 德阳市| 平凉市| 青浦区| 山丹县| 洪江市| 长武县| 永新县| 英超| 湘潭县| 廊坊市| 大港区| 卓尼县| 亚东县| 宝应县| 齐河县| 襄樊市| 友谊县| 成安县| 萨迦县| 湘乡市| 吴忠市|