programing

mariadb의 JSON_SET에 있는 와일드카드 대안

css3 2023. 7. 24. 22:40

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