我有一个带有follow数组的json列:
[
{
"id": "24276e4b-de81-4c2c-84e7-eed9c3582a31",
"key": "id",
"type": "input",
},
{
"id": "e0ca5aa1-359f-4460-80ad-70445be49644",
"key": "name",
"type": "textarea",
}
]
我尝试了以下查询来获取文档列中具有标识24276e4b-de81-4c2c-84e7-eed9c3582a31
的行,但它不返回结果:
select * from jobs WHERE document->'$[*].id' = "24276e4b-de81-4c2c-84e7-eed9c3582a31"
任何人都知道如何进行正确的查询?
答案 0 :(得分:13)
我使用mysql 5.7,所以JSON_CONTAINS可以像这样轻松使用:
1
答案 1 :(得分:5)
试试这样:
SELECT * FROM jobs WHERE document->'$[*].id' = json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31");
它适用于我,我觉得打击方式更好:
SELECT * FROM jobs WHERE json_contains(document->'$[*].id', json_array("24276e4b-de81-4c2c-84e7-eed9c3582a31"));
实际上很容易记住返回值是JSON_TYPE
但不是字符串或其他东西;
答案 2 :(得分:0)
使用document->'$[*].id'
时,它会返回所有ID属性的逗号分隔列表。这不会等于只有一个ID字符串的值,除非document
列中只有一个对象。
您需要使用JSON_SEARCH()
来搜索JSON值中的匹配元素。
SELECT *
FROM jobs
WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id');
答案 3 :(得分:0)
也许是吗? @Barmar
SELECT * FROM jobs WHERE JSON_SEARCH(document, "one", "24276e4b-de81-4c2c-84e7-eed9c3582a31", NULL, '$[*].id') IS NOT NULL;