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的要求。

你可能感兴趣的