Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL търсене на json стойност по ключ в масив

По същество имате предвид да приложите селекция и проекция към елементите на масива и обектните полета на вашия JSON документ. Трябва да направите нещо като клауза WHERE, за да изберете "ред" в масива, и след това да направите нещо като да изберете едно от полетата (не това, което сте използвали във вашите критерии за избор).

Те се правят в SQL с помощта на клаузата WHERE и SELECT-списъка с колони, но да направите същото с JSON не е нещо, което можете да направите лесно с функции като JSON_SEARCH() и JSON_CONTAINS().

Решението, което MySQL 8.0 предоставя, е JSON_TABLE() функция за превръщане на JSON документ във виртуална извлечена таблица – все едно сте дефинирали конвенционални редове и колони. Работи, ако JSON е във формата, който описвате, масив от обекти.

Ето демонстрация, която направих, като вмъкнах вашите примерни данни в таблица:

create table mytable ( mycol json );

insert into mytable set mycol = '[{"Race": "Orc", "strength": 14}, {"Race": "Knight", "strength": 7}]';

SELECT j.* FROM mytable, JSON_TABLE(mycol, 
  '$[*]' COLUMNS (
    race VARCHAR(10) PATH '$.Race', 
    strength INT PATH '$.strength'
  )
) AS j;
+--------+----------+
| race   | strength |
+--------+----------+
| Orc    |       14 |
| Knight |        7 |
+--------+----------+

Сега можете да правите неща, които обикновено правите със заявки SELECT, като избор и проекция:

SELECT j.strength FROM mytable, JSON_TABLE(mycol, '$[*]' 
  COLUMNS (
    race VARCHAR(10) PATH '$.Race', 
    strength INT PATH '$.strength'
  )
) AS j 
WHERE j.race = 'Orc'
+----------+
| strength |
+----------+
|       14 |
+----------+

Това има няколко проблема:

  1. Трябва да правите това всеки път заявявате JSON данните или създавате ИЗГЛЕД, за да го направите.

  2. Казахте, че не знаете полетата за атрибути, но за да напишете JSON_TABLE() заявка, трябва да посочите атрибутите, които искате да търсите и проектирате във вашата заявка. Не можете да използвате това за напълно недефинирани данни.

Отговорих на доста подобни въпроси относно използването на JSON в MySQL. Забелязах, че когато искате да направите нещо подобно, третирайки JSON документ като таблица, за да можете да приложите условие в клаузата WHERE към полета във вашите JSON данни, тогава всичките ви заявки стават много по-трудни. Тогава започвате да се чувствате така, сякаш би било по-добре да отделите няколко минути, за да дефинирате атрибутите си, за да можете да пишете по-прости заявки.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CONV() – Преобразуване на числа между различни бази в MySQL

  2. MySQL поддържа ли потребителски дефинирани типове данни

  3. Как да поръчам MySQL заявка по конкретна колона?

  4. MySQL „Отрязана неправилна INTEGER стойност“

  5. com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:в mysql