相关SQL语句说明

本案例中,使用如下的查询语句:

SELECT *
FROM (
    SELECT *
    FROM order_main om
    LEFT JOIN order_detail od ON om.order_id = od.order_id
    WHERE om.order_status IN (1, 2, 3)
      AND om.create_time >= '2025-01-01 00:00:00'
      AND om.user_id IN (
          SELECT user_id
          FROM user_info
          WHERE user_level >= 2
            AND is_active = 1
      )
) AS order_full
LEFT JOIN product_info pi ON order_full.product_id = pi.product_id
WHERE pi.is_on_sale = 1
ORDER BY order_full.create_time DESC, order_full.order_id DESC
LIMIT 0, 20;

代码优化说明

优化后的代码如下:

SELECT *
FROM (
    SELECT *
    FROM order_main om
    LEFT JOIN order_detail od ON om.order_id = od.order_id
    WHERE om.order_status IN (1, 2, 3)
      AND om.create_time >= unix_timestamp('2025-01-01 00:00:00')
      AND om.user_id IN (
          SELECT user_id
          FROM user_info
          WHERE user_level >= 2
            AND is_active = 1
      )
      AND om.action_id > 1 AND om.action_id < 100
) AS order_full
LEFT JOIN product_info pi ON order_full.product_id = pi.product_id
WHERE pi.is_on_sale = 1
ORDER BY order_full.create_time DESC, order_full.order_id DESC
LIMIT 0, 20;

在对话框中,自然语言描述的改写要求是:增加action_id大于1小于100的筛选条件,创建时间改为时间戳。

如下为改写说明:

  1. 增加筛选条件:
  • 位置:WHERE子句中
  • 原因:用户要求增加action_id大于1小于100的筛选条件。
  • 改写:在WHERE子句中添加条件 AND om.action_id > 1 AND om.action_id < 100
  1. 修改时间格式:
  • 位置:第2行 om.create_time >= '2025-01-01 00:00:00'
  • 原因:用户要求将创建时间改为时间戳。
  • 改写:将字符串格式的时间条件改为时间戳格式 om.create_time >= unix_timestamp('2025-01-01 00:00:00')

代码改写效果截图

案例说明 - 图1