我有一个TABLBE
CREATE TABLE `saved_links` (
`link_entry_id` bigint(20) NOT NULL AUTO_INCREMENT,
`link_id` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL,
`user_data_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL,
PRIMARY KEY (`link_entry_id`),
UNIQUE KEY `link_id` (`link_id`)
) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='saved Links'
并插入
INSERT INTO `saved_links`(`link_id`, `user_data_json` )
VALUES (
'AABBCC',
'[{
"mama@gmail_DOT_com": {"u_email": "mama@gmail_DOT_com", "private": "no"}},
{
"papa@gmail_DOT_com": {"u_email": "papa@gmail_DOT_com", "private": "no"}},
{
"daughter@gmail_DOT_com": {"u_email": "daughter@gmail_DOT_com", "private": "no"}},
{
"son@gmail_DOT_com": {"u_email": "son@gmail_DOT_com", "private": "no"}
}]'
), (
'DDEEFF',
'[{
"mama@gmail_DOT_com": {"u_email": "mama@gmail_DOT_com", "private": "no"}},
{
"papa@gmail_DOT_com": {"u_email": "papa@gmail_DOT_com", "private": "no"}}
]'
) ;
选择*
---------------------------------------------------
`link_id` | `user_data_json`
----------------------------------------------------
`AABBCC` | [{
| "mama@gmail_DOT_com": {"u_email": "mama@gmail_DOT_com", "private": "no"}},
| {
| "papa@gmail_DOT_com": {"u_email": "papa@gmail_DOT_com", "private": "no"}},
| {
| "daughter@gmail_DOT_com": {"u_email": "daughter@gmail_DOT_com", "private": "no"}},
| {
| "son@gmail_DOT_com": {"u_email": "son@gmail_DOT_com", "private": "no"}}]
---------------------------------------------------------------------------------------------
`DDEEFF` | [{
| "mama@gmail_DOT_com": {"u_email": "mama@gmail_DOT_com", "private": "no"}},
| {
| "papa@gmail_DOT_com": {"u_email": "papa@gmail_DOT_com", "private": "no"}}
| ]
---------------------------------------------------------------------------------------------
我想删除"papa@gmail_DOT_com"
和他所有values
的AABBCC
我已经尝试过(我正在使用 10.4.15-MariaDB)
UPDATE `saved_links`
SET `user_data_json` = IFNULL(
JSON_REMOVE( `user_data_json`, JSON_UNQUOTE(
REPLACE( JSON_SEARCH(
`user_data_json`, 'all', 'papa@gmail_DOT_com', NULL, '$**.papa@gmail_DOT_com'), '.u_email', '' ) ) ), `user_data_json` )
where `link_id` = 'AABBCC'
这返回
---------------------------------------------------
`link_id` | `user_data_json`
----------------------------------------------------
`AABBCC` | [{
| "mama@gmail_DOT_com": {"u_email": "mama@gmail_DOT_com", "private": "no"}},
| {}, //-> Notice these empty braces that are left behind.
| {
| "daughter@gmail_DOT_com": {"u_email": "daughter@gmail_DOT_com", "private": "no"}},
| {
| "son@gmail_DOT_com": {"u_email": "son@gmail_DOT_com", "private": "no"}}]
有没有办法避免{}
删除后出现空?
UPDATE01-如果您尝试:
UPDATE `saved_links` SET
`user_data_json` =
JSON_REMOVE(`user_data_json`, '$.papa@gmail_DOT_com')
WHERE `link_id`= 'AABBCC'
这将删除列中的所有数据user_data_json
WHERE link_id
= 'AABBCC'`
谢谢