반응형
mariadb 또는 mysql에서 json 배열 내의 요소를 찾고 삭제하는 방법
저는 mariadb 테이블의 '데이터' 필드에 이 json이 있고 저는 다음이 필요합니다.
- 예: TN-17170 ": {" id_fact ":" 6 "} 내에 값이 있는지 확인합니다.
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 ;
다음 패턴에 대한 대괄호(이 경우 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';
언급URL : https://stackoverflow.com/questions/63929116/how-to-find-and-delete-elements-within-a-json-array-in-mariadb-or-mysql
반응형
'sourcecode' 카테고리의 다른 글
오류 500.19 'oracle.manageddataaccess.client' 구성 섹션에 섹션 선언이 없으므로 읽을 수 없습니다. (0) | 2023.08.07 |
---|---|
ORA-00604 ORA-12705 (0) | 2023.08.07 |
swift의 고유한 배열 (0) | 2023.08.07 |
PL/SQL에서 레코드 표 사용 (0) | 2023.08.07 |
시스템입니다.웹.캐싱 또는 시스템.런타임.캐시는 에 적합합니다.NET 4 웹 애플리케이션 (0) | 2023.08.02 |