【问题标题】:Search an array of objects for specific key having a certain value在对象数组中搜索具有特定值的特定键
【发布时间】:2021-12-12 19:49:21
【问题描述】:

我想从 MySQL 表中的一个表中检索所有行,该表中有一个名为 items 的 JSON 列,内容如下:

[{"code":"MH005","qte":1,"totalpriceItem":"28.00"},{"code":"MH027","qte":1,"totalpriceItem":"28.00"}]
[{"code":"MH027","qte":1,"totalpriceItem":"30.00"}]
[{"code":"MH024","qte":1,"totalpriceItem":"28.00"},{"code":"MH028","qte":1,"totalpriceItem":"28.00"},{"code":"MH027","qte":1,"totalpriceItem":"28.00"}]
[{"code":"MH028","qte":1,"totalpriceItem":"30.00"}]

现在我希望能够选择键 code 具有值 MH027 的所有行。

我试过了,但没有成功:

SELECT *
FROM `transactions`
WHERE JSON_CONTAINS(`item`, 'MH027', '$[*].code')

非常感谢任何帮助。

【问题讨论】:

  • 您使用的是什么版本的 MySQL? Items.Row1Items.Row2 等到底是什么意思
  • Mysql版本:mysql 8.0.18 & mariaDB 10.4.10 表示插入表中每一行的JSON字段内容

标签: mysql sql json mysql-json


【解决方案1】:

如果我理解正确,您需要使用JSON_CONTAINS,如下所示:

SELECT *
FROM transactions
WHERE JSON_CONTAINS(item, '{"code": "MH027"}', '$')

第二个参数必须是有效的 JSON。如果值是动态的或可能包含特殊字符,您可以使用 JSON_OBJECT('code', 'MH028')

【讨论】:

  • 非常感谢您的帮助
  • 嘿,很抱歉再次打扰我知道这是一个已回答的问题,但我只想知道如何调整它,以便我可以选择项目以“​​MH%”开头的所有交易跨度>
  • 那将是一个不同的问题。我会使用JSON_TABLE
  • 你能指点我吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-26
  • 2018-12-05
  • 2017-07-22
  • 2018-09-10
  • 1970-01-01
  • 2012-10-30
  • 2018-08-03
相关资源
最近更新 更多