0

JSON format在 mysql 表中有以下内容,statistics列是stats

{
     "stats":{
          "gender":{
             "male":40, //40 is percentage
             "female":50
          },
      "cities":[
         {
            "name":"Melbourne",
            "country":"AU",
            "percentage":20
         },
         {
            "name":"London",
            "country":"GB",
            "percentage":10
         },
         {
            "name":"Sydney",
            "country":"AU",
            "percentage":14
         }
      ]
   }
}

我所知道的(使用 -> 或 JSON_EXTRACT):

select * from statistics as a where a.stats->'$.stats.gender.male' < 41

It returns the above row since male percentage is 40.

要求:

我需要获取国家 AU百分比 20的记录。

任何建议将不胜感激。

4

1 回答 1

1

一种选择是使用JSON_CONTAINS函数。

测试:

SET @`country` := '"AU"',
    @`percentage` := '20';

SELECT
  `stats`,
  `a`.`stats` -> '$.stats.cities[*].country',
  `a`.`stats` -> '$.stats.cities[*].percentage'
FROM
  `statistics` `a`
WHERE
  JSON_CONTAINS(`a`.`stats` -> '$.stats.cities[*].country', @`country`) AND
  JSON_CONTAINS(`a`.`stats` -> '$.stats.cities[*].percentage', @`percentage`);

请参阅db-fiddle

于 2018-01-29T19:19:50.313 回答