由于很多人私下问过我这个问题,我想我应该对这个答案进行第二次修改。这是具有完整 SQL 的要点,包括 SELECT、迁移和视图创建 https://gist.github.com/ti-ka/d0b264324c68fb81743035d98b9cbb8c and 一个实时的 sql 小提琴 http://rextester.com/FCQXL35972 (不保证小提琴的可用性).
假设您有一个如下表(名为:TBL_JSON):
ID CITY POPULATION_JSON_DATA
-----------------------------------------------------------------------
1 LONDON {"male" : 2000, "female" : 3000, "other" : 600}
2 NEW YORK {"male" : 4000, "female" : 5000, "other" : 500}
要选择每个 json 字段,您可以执行以下操作:
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;
结果:
ID CITY POPL_MALE POPL_FEMALE POPL_OTHER
-----------------------------------------------------------------
1 LONDON 2000 3000 600
2 NEW YORK 4000 5000 500
根据您的数据大小和 json 复杂性,运行这可能是一项昂贵的操作。我建议使用它
- 将表迁移到拆分数据库(要点参见附录 2-B)
- 至少创建一个视图(要点参见附录2-C)
注意:你可能有 json以双引号开头(字符串化):
"{"male" : 2000, "female" : 3000, "other" : 600}"
在 Ubuntu 和 Mac OSX Sierra 上使用 Mysql 5.7 进行了测试。