1.4 KiB
1.4 KiB
实施计划
1. 问题分析
- 错误:ER_CANT_AGGREGATE_2COLLATIONS - 字符集排序规则不匹配
- 原因:order_item表使用utf8mb4_0900_ai_ci,product表使用utf8mb4_unicode_ci
- 解决方案:在JOIN条件中显式指定排序规则,或修改JOIN方式
2. 调整join配置
在order_item.yml中修改与product的join配置,添加字符集转换函数,确保排序规则匹配:
joins:
- name: product
sql: "CONVERT({product.siteSkus} USING utf8mb4) COLLATE utf8mb4_unicode_ci LIKE CONCAT('%', {CUBE}.sku, '%')"
relationship: many_to_one
3. 优化join逻辑
考虑到siteSkus可能是JSON格式或包含多个SKU,使用更可靠的JSON函数处理(如果数据库支持):
joins:
- name: product
sql: "JSON_CONTAINS({product.siteSkus}, JSON_QUOTE({CUBE}.sku))"
relationship: many_to_one
4. 实施步骤
- 编辑order_item.yml文件,修改product join配置
- 选择合适的join条件:
- 如果siteSkus是逗号分隔列表:使用CONVERT函数转换排序规则
- 如果siteSkus是JSON数组:使用JSON_CONTAINS函数
- 验证查询文件order_item_product_by_sku_quantity_sum.json能够正确执行
- 确保查询结果显示product相关信息和对应的销售数量
5. 预期效果
添加正确的join后,查询将能够关联order_item和product的数据,计算出每个product的实际销售数量(基于order_item.quantity)