MySQL Error number: 3592; Symbol: ER_WINDOW_ILLEGAL_ORDER_BY; SQLSTATE: HY000 报错 故障修复 远程处理

文档解释

Error number: 3592; Symbol: ER_WINDOW_ILLEGAL_ORDER_BY; SQLSTATE: HY000

Message: Window ‘%s’: ORDER BY or PARTITION BY uses legacy position indication which is not supported, use expression.

Error number 3592 (ER_WINDOW_ILLEGAL_ORDER_BY): MySQL Error

详细说明:

Error number 3592(ER_WINDOW_ILLEGAL_ORDER_BY)表示MySQL不允许 window 分页子句中对 PARTITION BY 中列名进行排序。MySQL报出这个错误是因为在window 子句里使用了 order by 语句,而这个 order by 语句中使用了 partition by 子句中列名,这种操作是被禁止的。

常见案例

Error number 3592(ER_WINDOW_ILLEGAL_ORDER_BY)常见的情况是在使用 MySQL 的 window 分页子句时,使用 order by 语句对 partition by 中列名进行排序。例如:

“`

SELECT product_id,

ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY customer_id)

FROM purchase_history;

“`

解决方法:

要解决Error number 3592(ER_WINDOW_ILLEGAL_ORDER_BY)的错误,只需要确保 window 分页子句中的 order by 不包含任何 partition by 的字段即可。例如:

“`

SELECT product_id,

ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY order_date)

FROM purchase_history;

“`

也可以使用 MySQL 的子查询来间接使用 order by 和 partition by 的字段,但为了避免出现 Error number 3592(ER_WINDOW_ILLEGAL_ORDER_BY)的错误,必须避免使用同一个父级查询的列名来排序 window 分页子句的结果。例如:

“`

SELECT product_id,

ROW_NUMBER() OVER(PARTITION BY product_id ORDER BY (SELECT order_date FROM purchase_history WHERE product_id = purchase_history.product_id))

FROM purchase_history;

“`

此外,为了避免出现此类的MySQL错误,建议在开发时注意有关 window 分页子句的使用规范,在开发前测试SQL语句是非常有必要的。


数据运维技术 » MySQL Error number: 3592; Symbol: ER_WINDOW_ILLEGAL_ORDER_BY; SQLSTATE: HY000 报错 故障修复 远程处理