首页 > 解决方案 > 具有递归和更新内连接的 MariaDB SQL

问题描述

询问:

WITH RECURSIVE CTE AS(
SELECT 1 AS b, 10 AS a

UNION ALL
SELECT b+1, a+10 FROM CTE WHERE b < 5 )

UPDATE uptable a
INNER JOIN 
(
   SELECT b,a
   FROM CTE 
) c
ON a.a = c.b
SET a.a = c.a

桌子:

UPTABLE(
a INT
)

数据 1,2,3,4,5

发生 SQL 语法错误。

EverSQL SQL 查询语法检查和验证器 此查询有效

标签: sqlmariadbrecursive-query

解决方案


https://mariadb.com/kb/en/with/显示语法参考:

WITH [RECURSIVE] table_reference [(columns_list)] AS  (
  SELECT ...
)
[CYCLE cycle_column_list RESTRICT]
SELECT ...

它支持在其他 SQL 语句之前使用 CTE,SELECT但不支持在其他 SQL 语句之前使用,例如UPDATE.

其他一些 SQL 实现支持 CTE 语法UPDATE,包括MySQL 8.0PostgreSQLSQLiteMicrosoft SQL ServerInformix ...

MariaDB 显然实现了该功能的一个子集。


推荐阅读