MySQL 5.7 JSON: 如何将变量设置为 json_contains_path 就像 '$.name'
MySQL 5.7 JSON: how to set variable to json_contains_path like '$.name'
我使用了MySQL5.7,并且在mysql中存储了json,现在我需要对这个json.
做一些分析
如下table:
CREATE TABLE `json_test1` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`json` json DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
插入测试数据:
insert into json_test1 (name, json)
values ('lily', '{"age": 22, "lily": "ldfd"}'),
('sam','{"sam":"dfsf"}'),
('k','{"arm":"aaa"}'),
('cd','{"xl":"bbb"}');
现在,我需要检查 json
键是否包含 name
,例如:('sam','{"sam":"sam"}')
,如果 json
包含键 'sam',那么对于这一个,我可以在下面使用 sql:
select json_contains_path(json, 'one','$.sam') jsonC
from json_test1 where name='sam';
输出为 1,所以 json
包含密钥 'sam',但是 我如何检查所有这些数据以查看密钥是否存在于 json
, 在这种情况下,我需要传递一个变量给函数 json_contains_path(json, 'one','$.{name}')
,但我不知道如何在这个函数中设置变量。
预期结果:
有人知道吗?
你只需要添加一个CONCAT()
函数如
SELECT name, JSON_CONTAINS_PATH(json, 'one',CONCAT('$."',name,'"')) AS jsonExists
FROM json_test1
我使用了MySQL5.7,并且在mysql中存储了json,现在我需要对这个json.
做一些分析如下table:
CREATE TABLE `json_test1` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(128) NOT NULL,
`json` json DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB
插入测试数据:
insert into json_test1 (name, json)
values ('lily', '{"age": 22, "lily": "ldfd"}'),
('sam','{"sam":"dfsf"}'),
('k','{"arm":"aaa"}'),
('cd','{"xl":"bbb"}');
现在,我需要检查 json
键是否包含 name
,例如:('sam','{"sam":"sam"}')
,如果 json
包含键 'sam',那么对于这一个,我可以在下面使用 sql:
select json_contains_path(json, 'one','$.sam') jsonC
from json_test1 where name='sam';
输出为 1,所以 json
包含密钥 'sam',但是 我如何检查所有这些数据以查看密钥是否存在于 json
, 在这种情况下,我需要传递一个变量给函数 json_contains_path(json, 'one','$.{name}')
,但我不知道如何在这个函数中设置变量。
预期结果:
有人知道吗?
你只需要添加一个CONCAT()
函数如
SELECT name, JSON_CONTAINS_PATH(json, 'one',CONCAT('$."',name,'"')) AS jsonExists
FROM json_test1