在MySQL V8下执行的SQL可以正常工作,但在MariaDB V15版本下不能正常工作

2w2cym1i  于 2022-11-29  发布在  Mysql
关注(0)|答案(1)|浏览(128)

我有这样的SQL:

WITH
  randomised AS
(
  SELECT
    *,
    (SUM(FLOOR(RAND() * 1.5) + 1) OVER (ORDER BY id DESC)) DIV 4 AS offset
  FROM
    products
)
UPDATE
  products
INNER JOIN
  randomised
    ON randomised.id = products.id
SET
  products.created_at = DATE_SUB(CURDATE(), INTERVAL randomised.offset DAY), products.updated_at = DATE_SUB(CURDATE(), INTERVAL randomised.offset DAY)
;

这在MySQL版本8下工作正常,但在MySQL版本15下出现以下错误:

1064 -您的SQL语法有错误;查看与您的MariaDB服务器版本相对应的手册,了解在第10行“UPDATE products INNER JOIN randomized ON randomised.id = products...”附近使用的正确语法

是否需要更改某些内容以具有向后兼容性来修复此问题?

cpjpxq1n

cpjpxq1n1#

适用于MariaDB的代码...

  • CTE移动为子查询
  • offset已重命名为offset_days
UPDATE
  example
INNER JOIN
(
  SELECT
    *,
    (ROW_NUMBER() OVER (ORDER BY RAND()) + 3) DIV 4 * 4   AS offset_days
  FROM
    example
)
  randomised
    ON randomised.id = example.id
SET
  example.created_at = DATE_SUB(NOW(), INTERVAL randomised.offset_days DAY)

https://dbfiddle.uk/y2KQyCTx

***注意:*不要期望所有在MariaDB上运行的代码都能在MySQL上运行,反之亦然。MariaDB应该被视为一个完全独立的平台,就像您对待Oracle一样;他们碰巧拥有MySQL而不是MariaDB。
这不是向后兼容性问题。

相关问题