sql >> Database teknologi >  >> RDS >> Mysql

MySQL hvor JSON indeholder et tomt array

Her er to måder at gøre det på, test på 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": []} |
+--------------+

Jeg fandt en anden løsning, som hjælper med at kontrollere strengt for et tomt array:

Først skal du se, at jeg har to rækker, og den ene har et ikke-tomt array:

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)

Nu sørger jeg for, at længden af ​​arrayet er 0 som en måde at bekræfte, at den er tom:

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)


  1. Hvordan opretter man forbindelse til ekstern MySQL-server via SSH ved hjælp af JPA?

  2. Ekskluder matchede matrixelementer

  3. Fejl under udførelse af ODCIEXTTABLEOPEN callout

  4. Negativ grænse offset i mysql