web-dev-qa-db-ja.com

MySQLはJSONフィールドプロパティに値がある場所を選択します

JSONデータ型フィールド内のプロパティにWHEREを持つ基本的なMySQLクエリを作成する方法は? SOのjsonフィールドの基本的なwhere句qが表示されません。

このようなものですが、もちろんこれらは機能しません:

SELECT * from my_table where meta_data->name = 'bob';

SELECT * from my_table where meta_data[name] IS NOT NULL;
10
Andrew

JSONデータ型フィールドをクエリする方法の例:

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のショートカット):

SELECT * FROM users WHERE meta_data->"$.first_name" = 'bob'

JSONデータの結果が「引用」されていることに気付くかもしれません。 JSON_UNQUOTEを使用することも、これを使用することもできます。これはJSON_EXTRACTとJSON_UNQUOTEのショートカットです。

SELECT meta_data->>"$.first_name" FROM users WHERE meta_data->>"$.first_name" IS NOT NULL

そして、サブオブジェクト内からデータを選択するには:

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

24
Andrew