欢迎光临
我们一直在努力

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

文档解释

Error number: 4114; Symbol: ER_CTE_RECURSIVE_NOT_UNION; SQLSTATE: HY000

Message: Recursive table reference in EXCEPT or INTERSECT operand is not allowed.

错误说明

Error number 4114 (ER_CTE_RECURSIVE_NOT_UNION) 是MySQL的一个常见错误,是由于使用了不同的递归查询时,使用的查询构造不是UNION类型引起的。通常,MySQL要求使用递归查询的用户在构造查询时,必须将多个select语句包含在一个UNION运算符中,以表示递归查询的所有可能形式。

常见案例

该错误一般是因为在查询语句中使用递归查询构造,但是查询构造没有使用UNION来合并操作。下面是一个常见的造成Error number 4114 (ER_CTE_RECURSIVE_NOT_UNION)错误的案例,它使用一种抑制UNION的查询构造:

WITH cte1 AS (

SELECT * FROM tab1

UNION

SELECT * FROM tab2

),

cte2 AS (

SELECT * FROM cte1 WHERE c1=5

)

SELECT * FROM cte2;

在这种情况下,cte1定义时不使用UNION,而是直接对两个表进行选择操作,这是MySQL无法接受的。

解决方法

要解决Error number 4114 (ER_CTE_RECURSIVE_NOT_UNION),可以以下面的方式更改cte1定义:

WITH cte1 AS (

SELECT * FROM tab1

UNION ALL

SELECT * FROM tab2

),

cte2 AS (

SELECT * FROM cte1 WHERE c1=5

)

SELECT * FROM cte2;

将UNION改为UNION ALL,就可以解决Error 4114 (ER_CTE_RECURSIVE_NOT_UNION)这个错误。另外,在使用递归查询构造时,应始终使用UNION运算符合并查询,以满足MySQL的要求。

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。