【问题标题】:MySQL search in array of JSON objectsMySQL 在 JSON 对象数组中搜索
【发布时间】:2021-06-07 07:54:51
【问题描述】:

假设我有一个 JSON 列 json,其中包含以下数据:

+----+-----------------+
| id | json            |
+====+=================+
| 1  | [               |
|    |   {             |
|    |     "type":"a", |
|    |     "id":11111  |
|    |   },            |
|    |   {             |
|    |     "type":"a", |
|    |     "id":22222  |
|    |   },            |
|    |   {             |
|    |     "type":"b", |
|    |     "id":11111  |
|    |   }             |
|    | ]               |
+----+-----------------+
| 2  | [               |
|    |   {             |
|    |     "type":"b", |
|    |     "id":11111  |
|    |                 |
|    |   },            |
|    |   {             |
|    |     "type":"b", |
|    |     "id":22222  |
|    |                 |
|    |   },            |
|    |   {             |
|    |     "type":"c", |
|    |     "id":11111  |
|    |   }             |
|    | ]               |
+----+-----------------+

有没有办法确定这个数组中是否有一个条目具有type = aid = 11111(在同一个对象中),这样会返回第 1 行而不是第 2 行?

我尝试过的类似于

SELECT * 
  FROM table 
 WHERE json->>"$[*].type" = "a" 
   AND json->>"$[*].id" = 11111 

但这不是同一个条目。

【问题讨论】:

    标签: mysql sql json


    【解决方案1】:

    当然,我并没有停止寻找 - 经过 3 小时的反复试验,我找到了解决方案。现在我知道了解决方案,感觉有点愚蠢。

    SELECT *
      FROM table
     WHERE JSON_CONTAINS(json, JSON_OBJECT('type', 'a', 'id', 11111));
    

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-07
      • 1970-01-01
      相关资源
      最近更新 更多