一、前言
本次查询是在未知如何分库分表的情况下,对表数据进行查询,其中有的字段为JSON结构。需要提取JSON中某个字段的内容。
二、查询步骤
1、第一方式是将所有分表数据进行union all
select * from apporder.ord_shopping_order
union all
select * from apporder.ord_shopping_order_2
union all
select * from apporder.ord_shopping_order_3
union all
select * from apporder.ord_shopping_order_4
union all
select * from apporder.ord_shopping_order_5
union all
select * from apporder.ord_shopping_order_6
union all
select * from apporder.ord_shopping_order_7
union all
select * from apporder.ord_shopping_order_8
union all
select * from apporder.ord_shopping_order_9
union all
select * from apporder.ord_shopping_order_10
union all
select * from apporder.ord_shopping_order_11
union all
select * from apporder.ord_shopping_order_12
union all
select * from apporder.ord_shopping_order_13
union all
select * from apporder.ord_shopping_order_14
union all
select * from apporder.ord_shopping_order_15
union all
select * from apporder.ord_shopping_order_16
union all
select * from apporder.ord_shopping_order_17
union all
select * from apporder.ord_shopping_order_18
union all
select * from apporder.ord_shopping_order_19
union all
select * from apporder.ord_shopping_order_20
union all
select * from apporder.ord_shopping_order_21
union all
select * from apporder.ord_shopping_order_22
union all
select * from apporder.ord_shopping_order_23
union all
select * from apporder.ord_shopping_order_24
union all
select * from apporder.ord_shopping_order_25
union all
select * from apporder.ord_shopping_order_26
union all
select * from apporder.ord_shopping_order_27
union all
select * from apporder.ord_shopping_order_28
union all
select * from apporder.ord_shopping_order_29
union all
select * from apporder.ord_shopping_order_30
union all
select * from apporder.ord_shopping_order_31
union all
select * from apporder.ord_shopping_order_32
union all
select * from apporder.ord_shopping_order_33
union all
select * from apporder.ord_shopping_order_34
union all
select * from apporder.ord_shopping_order_35
union all
select * from apporder.ord_shopping_order_36
union all
select * from apporder.ord_shopping_order_37
union all
select * from apporder.ord_shopping_order_38
union all
select * from apporder.ord_shopping_order_39
union all
select * from apporder.ord_shopping_order_40
union all
select * from apporder.ord_shopping_order_41
union all
select * from apporder.ord_shopping_order_42
union all
select * from apporder.ord_shopping_order_43
union all
select * from apporder.ord_shopping_order_44
union all
select * from apporder.ord_shopping_order_45
union all
select * from apporder.ord_shopping_order_46
union all
select * from apporder.ord_shopping_order_47
union all
select * from apporder.ord_shopping_order_48
union all
select * from apporder.ord_shopping_order_49
union all
select * from apporder.ord_shopping_order_50
union all
select * from apporder.ord_shopping_order_51
union all
select * from apporder.ord_shopping_order_52
union all
select * from apporder.ord_shopping_order_53
union all
select * from apporder.ord_shopping_order_54
union all
select * from apporder.ord_shopping_order_55
union all
select * from apporder.ord_shopping_order_56
union all
select * from apporder.ord_shopping_order_57
union all
select * from apporder.ord_shopping_order_58
union all
select * from apporder.ord_shopping_order_59
union all
select * from apporder.ord_shopping_order_60
union all
select * from apporder.ord_shopping_order_61
union all
select * from apporder.ord_shopping_order_62
union all
select * from apporder.ord_shopping_order_63;
2、第二种方式是创建一个存储过程,方便以后更快速查询
先建一个表结构与 分表一样的表 ord_shopping_procedure
create table ord_shopping_procedure as select * from ord_shopping_order_2;
create table ord_shopping_procedure as select * from ord_shopping_order_2
然后创建存储过程
CREATE DEFINER=`root`@`%` PROCEDURE `apporder`.`ord_shopping`()
begin
truncate table ord_shopping_procedure;
insert into ord_shopping_procedure
select * from apporder.ord_shopping_order
union all
select * from apporder.ord_shopping_order_2
union all
select * from apporder.ord_shopping_order_3
union all
select * from apporder.ord_shopping_order_4
union all
select * from apporder.ord_shopping_order_5
union all
select * from apporder.ord_shopping_order_6
union all
select * from apporder.ord_shopping_order_7
union all
select * from apporder.ord_shopping_order_8
union all
select * from apporder.ord_shopping_order_9
union all
select * from apporder.ord_shopping_order_10
union all
select * from apporder.ord_shopping_order_11
union all
select * from apporder.ord_shopping_order_12
union all
select * from apporder.ord_shopping_order_13
union all
select * from apporder.ord_shopping_order_14
union all
select * from apporder.ord_shopping_order_15
union all
select * from apporder.ord_shopping_order_16
union all
select * from apporder.ord_shopping_order_17
union all
select * from apporder.ord_shopping_order_18
union all
select * from apporder.ord_shopping_order_19
union all
select * from apporder.ord_shopping_order_20
union all
select * from apporder.ord_shopping_order_21
union all
select * from apporder.ord_shopping_order_22
union all
select * from apporder.ord_shopping_order_23
union all
select * from apporder.ord_shopping_order_24
union all
select * from apporder.ord_shopping_order_25
union all
select * from apporder.ord_shopping_order_26
union all
select * from apporder.ord_shopping_order_27
union all
select * from apporder.ord_shopping_order_28
union all
select * from apporder.ord_shopping_order_29
union all
select * from apporder.ord_shopping_order_30
union all
select * from apporder.ord_shopping_order_31
union all
select * from apporder.ord_shopping_order_32
union all
select * from apporder.ord_shopping_order_33
union all
select * from apporder.ord_shopping_order_34
union all
select * from apporder.ord_shopping_order_35
union all
select * from apporder.ord_shopping_order_36
union all
select * from apporder.ord_shopping_order_37
union all
select * from apporder.ord_shopping_order_38
union all
select * from apporder.ord_shopping_order_39
union all
select * from apporder.ord_shopping_order_40
union all
select * from apporder.ord_shopping_order_41
union all
select * from apporder.ord_shopping_order_42
union all
select * from apporder.ord_shopping_order_43
union all
select * from apporder.ord_shopping_order_44
union all
select * from apporder.ord_shopping_order_45
union all
select * from apporder.ord_shopping_order_46
union all
select * from apporder.ord_shopping_order_47
union all
select * from apporder.ord_shopping_order_48
union all
select * from apporder.ord_shopping_order_49
union all
select * from apporder.ord_shopping_order_50
union all
select * from apporder.ord_shopping_order_51
union all
select * from apporder.ord_shopping_order_52
union all
select * from apporder.ord_shopping_order_53
union all
select * from apporder.ord_shopping_order_54
union all
select * from apporder.ord_shopping_order_55
union all
select * from apporder.ord_shopping_order_56
union all
select * from apporder.ord_shopping_order_57
union all
select * from apporder.ord_shopping_order_58
union all
select * from apporder.ord_shopping_order_59
union all
select * from apporder.ord_shopping_order_60
union all
select * from apporder.ord_shopping_order_61
union all
select * from apporder.ord_shopping_order_62
union all
select * from apporder.ord_shopping_order_63;
truncate table ord_shopping;
insert into ord_shopping
select t.*, JSON_EXTRACT(t.json, '$.skuName') as sku_name from (
select id,order_type,order_mode,user_id,user_name,trade_no,state,total_amount, pay_amount pay_time ,
ou_name ,mobile ,create_time, sale_amount, JSON_EXTRACT(item_abstract_json, '$[0]') as json,store_ou_code,store_name
,mch_ou_code,mch_name
from ord_shopping_procedure ) t;
END;
由于表中存在JSON字段,同时我们再查询表是应查询需要的字段即可
所以这一段是重点
truncate table ord_shopping;
insert into ord_shopping
select t.*, JSON_EXTRACT(t.json, '$.skuName') as sku_name from (
select id,order_type,order_mode,user_id,user_name,trade_no,state,total_amount, pay_amount pay_time ,
ou_name ,mobile ,create_time, sale_amount, JSON_EXTRACT(item_abstract_json, '$[0]') as json,store_ou_code,store_name
,mch_ou_code,mch_name
from ord_shopping_procedure ) t;
truncate table ord_shopping;
insert into ord_shopping
select t.*, JSON_EXTRACT(t.json, '$.skuName') as sku_name from (
select id,order_type,order_mode,user_id,user_name,trade_no,state,total_amount, pay_amount pay_time ,
ou_name ,mobile ,create_time, sale_amount, JSON_EXTRACT(item_abstract_json, '$[0]') as json,store_ou_code,store_name
,mch_ou_code,mch_name
from ord_shopping_procedure ) t;
JSON_EXTRACT(item_abstract_json, '$[0]') as json
表示item_abstract_json这字段存储的JSON字符串数组,我们把下标为0的取出来,
样例数据是这样的
[{
"id": 1059,
"productType": 1,
"productTypeSub": null,
"skuName": "L’Oréal 欧莱雅男士锐能抗皱紧致洁面膏",
"skuId": 194538,
"skuCode": "200015112056194538",
"thirdCode": "C023338",
"isGift": 0,
"scale": null,
"unit": null,
"brandId": 1707,
"storeOuCode": "1043002001",
"number": 1,
"specs": "规格:100ML ",
"cls1StaId": 1316,
"cls2StaId": 16831,
"cls3StaId": 16840,
"cls1StaName": "美妆护肤",
"cls2StaName": "男士护肤",
"cls3StaName": "男士洁面",
"phPictureUrl": "https:///default_file/00/01/52/02.jpg",
"activityId": null,
"activityTitle": null,
"selfActivityId": null,
"selfActivityTitle": null,
"selfActivityType": null,
"randomDeductionActivityId": null,
"randomDeductionActivityTitle": null,
"salePrice": 28.0,
"realPrice": 28,
"pointsPrice": 0,
"rewardsPrice": 0,
"empRewardsPrice": 0,
"enterprisePrice": 0,
"eleType": null,
"eleDetailJson": null,
"thirdServeId": null,
"lineNo": "1",
"packageItem": [],
"barcode": null,
"exchangeJumpAddress": null,
"skuSaleScale": null,
"perWeight": null,
"externalNumber": null,
"externalPrice": null,
"deliverType": 2,
"serveHour": null,
"serveFlag": 0,
"qyMerchant": null,
"qyAlias": null,
"distributionHigherReferrerId": null,
"thirdpartyDeliveryTime": null,
"thirdpartyCompleteTime": null
}]
然后我们只需要取JSON的 skuName的内容就要用到这个函数
JSON_EXTRACT(t.json, '$.skuName') as sku_name
执行完存储过程,最后我们查询一下这个表ord_shopping