从与mysql json中的属性匹配的对象数组中选择对象

jfewjypa  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(440)

我在mysql数据库中有一个表,其中有一个json类型的列city,它存储了一个具有以下结构的city对象的json数组:

  1. {
  2. "cities": [
  3. {
  4. "id": 1,
  5. "name": "Mumbai",
  6. "countryID": "9"
  7. },
  8. {
  9. "id": 2,
  10. "name": "New Delhi",
  11. "countryID": "9"
  12. },
  13. {
  14. "id": 3,
  15. "name": "Abu Dhabi",
  16. "countryID": "18"
  17. }
  18. ]
  19. }

我想从城市数组中选择对象 countryID = 90 但由于对象数组存储在一个列中,因此我陷入了困境 city 这阻止了我做 (*)WHERE JSON_CONTAINS(city->'$.cities', JSON_OBEJECT('countryID', '90')) .
我的问题看起来像这样,我什么都没有得到, SELECT JSON_EXTRACT(city, '$.cities') FROM MyTable WHERE JSON_CONTAINS(city->'$.cities', JSON_OBJECT('countryID', '90')) 如果有人能给我指出正确的方向或者给我一个解决这个问题的方法,那将是一个很大的帮助。
谢谢

ymdaylpp

ymdaylpp1#

如果您使用的是mysql 8.0,那么有一个特性叫做 JSON table functions . 它将json数据转换为表格形式,然后可以过滤结果。
下面给出了实现相同目标的查询

  1. Select country
  2. FROM json_cal,
  3. JSON_TABLE(
  4. city,
  5. "$.cities[*]" COLUMNS(
  6. country JSON PATH "$",
  7. NESTED PATH '$.countryID' COLUMNS (countryID TEXT PATH '$')
  8. )
  9. ) AS jt1
  10. where countryID = 90;

db小提琴可以在这里找到
关于json表函数的更多信息可以在这里找到

相关问题