Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL où JSON contient un tableau vide

Voici deux façons de le faire, en testant sur MySQL 5.7.24 :

mysql 5.7.24> select config from mytable 
  where json_contains(config, cast('[]' as json), '$.tier');
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+

mysql 5.7.24> select config from mytable 
  where json_contains_path(config, 'one', '$.tier');
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+

J'ai trouvé une autre solution, qui permet de vérifier strictement un tableau vide :

Tout d'abord, voyez que j'ai deux lignes, et l'une a un tableau non vide :

mysql 5.7.24> select config from mytable 
  where json_contains(config, json_array(), '$.tier');
+----------------------------------------+
| config                                 |
+----------------------------------------+
| {"tier": []}                           |
| {"tier": [{"name": "BK", "value": 8}]} |
+----------------------------------------+
2 rows in set (0.00 sec)

Maintenant, je m'assure que la longueur du tableau est 0 pour confirmer qu'il est vide :

mysql 5.7.24> select config from mytable 
  where json_contains(config, json_array(), '$.tier') 
  and json_length(config, '$.tier') = 0; 
+--------------+
| config       |
+--------------+
| {"tier": []} |
+--------------+
1 row in set (0.00 sec)