使用MySQL中的对象数组查询JSON列

时间:2016-08-05 20:54:09

标签: mysql mysql-json

我有一个带有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"

任何人都知道如何进行正确的查询?

4 个答案:

答案 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;