簡體   English   中英

如何在 mariadb 或 mysql 中查找和刪除 json 數組中的元素

[英]How to find and delete elements within a json array in mariadb or mysql

我在 mariadb 表的“數據”字段中有這個 json,我需要:

  1. 知道一個值是否存在於 eg: TN-17170 ": {" id_fact ":" 6 "} SELECT JSON_EXTRACT(data, '$**.TN-17170.id_fact') as exist from fact WHERE id ='6'但是這顯示了類似 ['6'] 的內容,我只想得到 '6'
  2. 換句話說,如果該值存在,則將其刪除。 我嘗試使用UPDATE `fact` set datos= JSON_REMOVE(data, '$.datos.TN-17170') WHERE id ='6' ,但我不能。

請幫我整理一下查詢,關於mariadb中json使用的實用文檔不多,想用這些功能。

CREATE TABLE `fact` (
  `id` int(20) NOT NULL,
  `data` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish2_ci;

INSERT INTO `fact` (`id`, `data`) VALUES
(6, '{\"id\": \"23\", \"datos\": [{\"TN-17170\": {\"id_fact\": \"6\"}}, {\"TN-17171\": {\"id_fact\": \"6\"}}, {\"TN-17173\": {\"id_fact\": \"6\"}}, {\"TN-17127\": {\"id_fact\": \"6\"}}, {\"TN-17177\": {\"id_fact\": \"6\"}}, {\"TN-17397\": {\"id_fact\": \"6\"}}]}');

SELECT JSON_EXTRACT(data, '$**.TN-17170.id_fact') as exist from fact WHERE id ='6' ;

SELECT * FROM fact ;

UPDATE `fact` set data= JSON_REMOVE(data, '$.datos.TN-17170') WHERE id ='6';
SELECT * FROM fact ;

數據庫示例

您需要為JSON_EXTRACT()函數的模式指定方括號內的索引(在本例中0 JSON_EXTRACT() ,以便提取數組的內容:

SELECT JSON_EXTRACT(data, '$.datos[0].TN-17170.id_fact') AS exist 
  FROM `fact` 
 WHERE id ='6';

這也可以在JSON_REMOVE()函數中使用:

UPDATE `fact` 
   SET data= JSON_REMOVE(data, '$.datos[0].TN-17170.id_fact') 
 WHERE id ='6';

演示

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM