如何在mysql/mariaDB中的JSON列上执行SELECT

wen*_*nky 6 mysql mysql-python mariadb

如何在JSON列上应用WHERE子句以对具有两列(id Integer,attr JSON)的表执行SELECT查询.JSON是嵌套的,在过滤条件中,只允许有一个json键值对.这个关键值对可以在Josn的任何地方.

+----+-----------------------------------------------------------------
| id | attr                                                                                          
|
+----+-----------------------------------------------------------------
|  1 | {"id":"0001","type":"donut","name":"Cake","ppu":0.55}                                         
|
|  2 | {"id":"0002","type":"donut","name":"Cake","ppu":0.55,"batters":
       {"batter1":100,"batter2":200}} 
+----+-----------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

mar*_*sjm 12

在MariaDB 10.2中,您可以使用JSON函数.

例如,如果要从数据库中选择所有甜甜圈,则执行以下操作:

SELECT * FROM t WHERE JSON_CONTAINS(attr, '"donut"', '$.type');
Run Code Online (Sandbox Code Playgroud)

注意:在MariaDB中,JSON函数适用于所有文本数据类型(VARCHAR,TEXT等).该JSON类型只是一个别名LONGTEXT.


Mar*_*vFe 7

markusjm 的回答类似,您可以直接从 json by 字段中进行选择,例如:

SELECT json_extract(attr, '$.type') FROM t;
Run Code Online (Sandbox Code Playgroud)