Dal momento che molte persone mi hanno posto questa domanda personalmente, ho pensato di dare a questa risposta una seconda revisione. Ecco un gist che ha l'SQL completo con SELECT, Migration e View Creation e un violino sql live (disponibilità non garantita per violino) .
Supponiamo che tu abbia una tabella (denominata:TBL_JSON) come questa:
ID CITY POPULATION_JSON_DATA
-----------------------------------------------------------------------
1 LONDON {"male" : 2000, "female" : 3000, "other" : 600}
2 NEW YORK {"male" : 4000, "female" : 5000, "other" : 500}
Per selezionare ogni campo json, puoi fare:
SELECT
ID, CITY,
json_extract(POPULATION_JSON_DATA, '$.male') AS POPL_MALE,
json_extract(POPULATION_JSON_DATA, '$.female') AS POPL_FEMALE,
json_extract(POPULATION_JSON_DATA, '$.other') AS POPL_OTHER
FROM TBL_JSON;
che risulta:
ID CITY POPL_MALE POPL_FEMALE POPL_OTHER
-----------------------------------------------------------------
1 LONDON 2000 3000 600
2 NEW YORK 4000 5000 500
Questa potrebbe essere un'operazione costosa da eseguire in base alla dimensione dei dati e alla complessità json. Suggerisco di usarlo per
- Migrazione della tabella per dividere il database (Vedi Appendice 2-B nel gist)
- Almeno crea una vista (vedi Appendice 2-C nel succo)
Attenzione:potresti avere json che inizia con virgolette doppie (stringato):
"{"male" : 2000, "female" : 3000, "other" : 600}"
Testato con Mysql 5.7 su Ubuntu e Mac OSX Sierra.