API-vendor/.trae/documents/添加order_item与product的join关系.md

1.4 KiB
Raw Blame History

实施计划

1. 问题分析

  • 错误ER_CANT_AGGREGATE_2COLLATIONS - 字符集排序规则不匹配
  • 原因order_item表使用utf8mb4_0900_ai_ciproduct表使用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. 实施步骤

  1. 编辑order_item.yml文件修改product join配置
  2. 选择合适的join条件
    • 如果siteSkus是逗号分隔列表使用CONVERT函数转换排序规则
    • 如果siteSkus是JSON数组使用JSON_CONTAINS函数
  3. 验证查询文件order_item_product_by_sku_quantity_sum.json能够正确执行
  4. 确保查询结果显示product相关信息和对应的销售数量

5. 预期效果

添加正确的join后查询将能够关联order_item和product的数据计算出每个product的实际销售数量基于order_item.quantity