我有一个带有follow数组的json列:
[
{
"id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
"key": "id",
"type": "input",
},
{
"id": "e0ca5aa1-359f-4460-80ad-70445be49644",
"key": "name",
"type": "textarea",
}
]
Run Code Online (Sandbox Code Playgroud)
我尝试了以下查询来获取24276e4b-de81-4c2c-84e7-eed9c3582a31文档列中具有id的行,但它不返回结果:
select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做正确的查询?
Sep*_*Sep 17
我使用mysql 5.7,因此JSON_CONTAINS可以像这样轻松使用:
SELECT JSON_CONTAINS(
'[{"id": "24av","name": "she"},{"id": "e0c2", "name": "another_she"}]',
JSON_OBJECT('id', "e0c2")
);
Run Code Online (Sandbox Code Playgroud)
尝试这样:
SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31");
Run Code Online (Sandbox Code Playgroud)
它对我有用,我认为打击的方式更有效:
SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"));
Run Code Online (Sandbox Code Playgroud)
实际上,很容易记住返回值JSON_TYPE不是String或其他值。
也许这个?@巴马尔
SELECT * FROM jobs WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id') IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)
当您使用时document->'$[*].id',它会返回所有 ID 属性的逗号分隔列表。这不会等于仅一个 ID 字符串的值,除非该document列中只有一个对象。
您需要用于JSON_SEARCH()在 JSON 值中搜索匹配的元素。
SELECT *
FROM jobs
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id');
Run Code Online (Sandbox Code Playgroud)