MySQL选择JSON字段属性的值 [英] MySQL select where JSON field property has value
问题描述
如何编写在JSON数据类型字段中的属性上具有WHERE的基本MySQL查询?我看不到SO上json字段的基本where子句q.
How to write a basic MySQL query that has a WHERE on a property within a JSON data-type field? I don't see basic where clause q for json fields on SO.
类似这样的东西,但是这些当然不起作用:
Something like this, but of course these dont work:
SELECT * from my_table where meta_data->name = 'bob';
SELECT * from my_table where meta_data[name] IS NOT NULL;
推荐答案
有关如何查询json数据类型字段的一些示例:
Some examples of how to query a json data type field:
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.first_name") = 'bob';
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.age") IS NOT NULL;
SELECT * FROM users WHERE JSON_EXTRACT(meta_data, "$.accepted_policy") = true;
使用mysql 5.7.9 +
您也可以执行此操作(JSON_EXTRACT的快捷方式):
You can also just do this (shortcut for JSON_EXTRACT):
SELECT * FROM users WHERE meta_data->"$.first_name" = 'bob'
您可能会注意到您的json数据结果被引用"了.您可以使用JSON_UNQUOTE,也可以使用它,这是JSON_EXTRACT&的快捷方式. JSON_UNQUOTE:
You might notice your json data results are "quoted". You could use JSON_UNQUOTE, or you could use this, which is a shortcut of JSON_EXTRACT & JSON_UNQUOTE:
SELECT meta_data->>"$.first_name" FROM users WHERE meta_data->>"$.first_name" IS NOT NULL
并从子对象中选择数据:
And to select data from within sub objects:
SELECT meta_data->>"$.address.tel" FROM users WHERE meta_data->>"$.address.street" = "123 Main St"
docs: https://dev.mysql. com/doc/refman/5.7/en/json-search-functions.html
这篇关于MySQL选择JSON字段属性的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!