web-dev-qa-db-fra.com

MySQL sélectionne la valeur de la propriété du champ JSON

Comment écrire une requête MySQL de base qui a un WHERE sur une propriété dans un champ de type de données JSON? Je ne vois pas la clause where de base q pour les champs json sur SO.

Quelque chose comme ça, mais bien sûr, cela ne fonctionne pas:

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

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

Quelques exemples de la façon d'interroger un champ de type de données 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;

Avec mysql 5.7.9 +

Vous pouvez également faire cela (raccourci pour JSON_EXTRACT):

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

Vous remarquerez peut-être que les résultats de vos données json sont "cités". Vous pouvez utiliser JSON_UNQUOTE, ou vous pouvez utiliser ceci, qui est un raccourci de JSON_EXTRACT & JSON_UNQUOTE:

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

Et pour sélectionner des données dans des sous-objets:

SELECT meta_data->>"$.address.tel" FROM users WHERE meta_data->>"$.address.street" = "123 Main St"

documents: https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

24
Andrew