mariadb의 JSON_SET에 있는 와일드카드 대안
테이블은 다음과 같습니다.
create table_name {idint}, 클래스 json };
클래스(id, class) 값에 삽입(1, '{"class" : 1, "student" : 1, "student" : "10", "name" : "A" }, {"student_id" : "5", "name" : "B" }});
이제 이름을 학생의 "bbb"로 업데이트해야 합니다. 여기서 "bb_id" = 5. 학생들이 보이는 것처럼 학생 문서/개체 목록입니다.JSON_SET은 경로에서 와일드카드(*)를 지원하지 않으므로 JSON_SET 또는 기타 방법을 사용하여 목표를 달성하는 방법.
한 가지 옵션은 다음과 같습니다.
MariaDB [_]> DROP TABLE IF EXISTS `table_name`;
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> CREATE TABLE IF NOT EXISTS `table_name` (
-> `id` SERIAL,
-> `class` JSON NOT NULL,
-> CHECK (JSON_VALID(`class`))
-> );
Query OK, 0 rows affected (0.00 sec)
MariaDB [_]> INSERT INTO `table_name` (`class`)
-> VALUES ('{"class": 1, "student": [{"student_id": "10", "name": "A"}, {"student_id": "5", "name": "B"}]}');
Query OK, 1 row affected (0.00 sec)
MariaDB [_]> SELECT `id`, `class`
-> FROM `table_name`;
+----+------------------------------------------------------------------------------------------------+
| id | class |
+----+------------------------------------------------------------------------------------------------+
| 1 | {"class": 1, "student": [{"student_id": "10", "name": "A"}, {"student_id": "5", "name": "B"}]} |
+----+------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
MariaDB [_]> UPDATE `table_name`
-> SET `class` =
-> JSON_SET(
-> `class`,
-> REPLACE(
-> JSON_UNQUOTE(
-> JSON_SEARCH(`class`,
-> 'one',
-> 5,
-> NULL,
-> '$.student'
-> )
-> ),
-> 'student_id',
-> 'name'
-> ),
-> 'bbb'
-> )
-> WHERE `id` = 1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [_]> SELECT `id`, `class`
-> FROM `table_name`;
+----+--------------------------------------------------------------------------------------------------+
| id | class |
+----+--------------------------------------------------------------------------------------------------+
| 1 | {"class": 1, "student": [{"student_id": "10", "name": "A"}, {"student_id": "5", "name": "bbb"}]} |
+----+--------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
dbfidle을 참조하십시오.
언급URL : https://stackoverflow.com/questions/48063706/alternative-of-wildcard-in-json-set-in-mariadb
'programing' 카테고리의 다른 글
판다의 콘캣 기능에서 '레벨', '키' 및 이름 인수는 무엇입니까? (0) | 2023.07.24 |
---|---|
libarclite_iphoneos.a 파일 누락(Xcode 14.3) (0) | 2023.07.24 |
SQL 화학: 날짜 필드를 필터링하는 방법은 무엇입니까? (0) | 2023.07.19 |
일 년 중 어느 분기에 날짜가 있는지 확인하는 기능이 있습니까? (0) | 2023.07.19 |
Oracle에서 행의 sha1-hash (0) | 2023.07.19 |