[英]How to find and delete elements within a json array in mariadb or mysql
我在 mariadb 表的“數據”字段中有這個 json,我需要:
SELECT JSON_EXTRACT(data, '$**.TN-17170.id_fact') as exist from fact WHERE id ='6'
但是這顯示了類似 ['6'] 的內容,我只想得到 '6'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.