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 

Demo