mysql array 搜索_MySQL按数组中的键搜索JSON值

这篇博客介绍了如何在MySQL8.0中使用JSON_TABLE()函数将JSON文档转换为虚拟表,以便进行选择和投影操作。通过示例展示了如何查询JSON数组中的元素,并执行WHERE子句来筛选特定数据。虽然这种方法使得查询变得更加复杂,但提供了处理JSON数据的灵活性。
摘要由CSDN通过智能技术生成

小编典典

本质上,您的意思是将选择和投影应用于JSON文档的数组元素和对象字段。您需要执行WHERE子句之类的操作来选择数组中的“行”,然后执行诸如选择一个字段(而不是您在选择条件中使用的字段)之类的操作。

这些是使用WHERE子句和列的SELECT-列表在SQL中完成的,但是使用JSON_SEARCH()和JSON_CONTAINS()之类的函数来轻松实现JSON并非易事。

MySQL 8.0提供的解决方案是JSON_TABLE()函数,可将JSON文档转换为虚拟派生表-

就像您已定义常规行和列一样。如果JSON采用您描述的格式(对象数组),则该方法有效。

这是我通过将示例数据插入表中进行的演示:

create table mytable ( mycol json );

insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';

SELECT j.* FROM mytable, JSON_TABLE(mycol,

'$[*]' COLUMNS (

race VARCHAR(10) PATH '$.Race',

strength INT PATH '$.strength'

)

) AS j;

+--------+----------+

| race | strength |

+--------+----------+

| Orc | 14 |

| Knight | 7 |

+--------+----------+

现在,您可以执行通常使用SELECT查询执行的操作,例如选择和投影:

SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]'

COLUMNS (

race VARCHAR(10) PATH '$.Race',

strength INT PATH '$.strength'

)

) AS j

WHERE j.race = 'Orc'

+----------+

| strength |

+----------+

| 14 |

+----------+

这有两个问题:

每次 查询JSON数据时 都 需要执行此操作,否则需要创建一个VIEW来执行此操作。

您说过您不知道属性字段,但是要编写JSON_TABLE()查询,您必须指定要搜索的属性并在查询中进行投影。您不能将其用于完全未定义的数据。

我已经回答了很多有关在MySQL中使用JSON的类似问题。我观察到,当您想做这种事情时,将JSON文档当作表对待,以便可以将WHERE子句中的条件应用于JSON数据中的字段,那么所有查询都会变得更加困难。然后,您开始觉得花几分钟时间来定义属性会更好,因此您可以编写更简单的查询。

2020-07-27

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值