sql >> Databasteknik >  >> RDS >> Mysql

MySQL där JSON innehåller en tom array

Här är två sätt att göra det, testa 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": []} |
+--------------+

Jag hittade en annan lösning som hjälper till att strikt kontrollera efter en tom array:

Se först att jag har två rader och en har en icke-tom 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 ser jag till att längden på arrayen är 0 som ett sätt att bekräfta att den är 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. laravelfog med endast begränsande 2 rader

  2. Hur bryter man TCP/IP-anslutningar med keepalive postgreSQL utan att ändra något i registret?

  3. Hur man säkert undkommer indata i php för mysql

  4. Generera CREATE INDEX-satser i SQL Server