我在MariaDB/MySQL中有以下JSON:

[{"uid": 5}, {"uid": 6}, {"uid": 7}]

 user_pst_tb
------------------------------
pst_id | pst_liked_by
--------------------------
1      |[]
-------|----------------
.      |[{"uid": 9}]
-------|----------------
.      |[]
-------|----------------
29     |[]
-------|----------------
30     | [{"uid": 5}, {"uid": 6}, {"uid": 7}]

我想使用JSON_REMOVE或任何方法在pst_id = 30上单独删除{"uid": 6},但我找不到如何表示路径.我想到了这个:

UPDATE user_pst_tb
    SET `pst_liked_by` = JSON_REMOVE( 
        `pst_liked_by`, JSON_UNQUOTE(
            REPLACE( 
                JSON_SEARCH( `pst_liked_by`, 'one', '6', null, '$**.uid' )
                , '.uid'
                , ''
            )
        ) 
    ) WHERE pst_id = 30; 

出于某种原因,MariaDB和MySQL文档没有这样的示例.如有任何帮助,我们不胜感激.

我也try 过:

UPDATE user_pst_tb SET `pst_liked_by`= JSON_REMOVE(`pst_liked_by`, JSON_UNQUOTE( JSON_SEARCH(`pst_liked_by`, 'one','{"uid": 6}') )) WHERE `pst_id` = 30;

第二个查询令人遗憾地清除了所有JSON个数据

UPDATE 1 (some GOOD NEWS)个 我试过这个

 UPDATE user_pst_tb SET `pst_liked_by` = 
      JSON_REMOVE(`pst_liked_by`,JSON_UNQUOTE(JSON_search(`pst_liked_by`, 
'one', '6'))) WHERE `pst_id` = 30;

不知何故奏效了,但留下了大约{}英镑的空头支票.

例:[{"uid": 5}, {}, {"uid": 7}]任何go 掉空方括号的 idea 都会很棒!

推荐答案

我得到了@ypercubeᵀᴹ的帮助

最后一个有效的查询是:

UPDATE nz_psts_01
    SET `pst_liked_by` = JSON_REMOVE(
        `pst_liked_by`, JSON_UNQUOTE(
            REPLACE(
                JSON_SEARCH( `pst_liked_by`, 'one', '6', null, '$**.uid' )
                , '.uid'
                , ''
            )
        )
    ) WHERE pst_id = 29
 and JSON_SEARCH( `pst_liked_by`, 'one', '6', null, '$**.uid' ) is not null ;

希望它能帮助一些人

Mysql相关问答推荐

一次又一次地删除事件行

MySQL添加表会将&@@&qot;追加到表名

MySQL::JSON列的添加使SELECT查询非性能(当需要临时表时)

返回包含某一列的分组最大值的行,说明列中的重复值

对匹配两个或多个表的表结果进行排序

避免多个SQL查询的重构代码

Select 最高等级最多的部门名称

需要按总金额检索前 3 个供应商,每个类别 - 子类别

相关查询 - 在派生表中,我可以有多个嵌套级别吗?

使用 DISTINCT 时无法从数据库中查询所有数据

提取 MySQL 5.7 连续值的差异

如何知道 Select 查询花费了多少时间?

MySQL IF() 函数根据指定条件执行代码块

查找同时玩过这两种游戏的玩家

如何查看 rdsadmin 在 mysql 实例上的权限?

PHP 判断 NULL

MySQL:ALTER IGNORE TABLE 给出违反完整性约束

如何从命令行调用带有参数的mysql存储过程?

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

MySQL中的base64编码