MySQL8 递归 CTE 错误代码:1054。未知列
MySQL 8 Recursive CTE Error Code: 1054. Unknown column
本MySQL8条查询:
WITH RECURSIVE cte_count (n)
AS (
SELECT 1
UNION ALL
SELECT
n + 1
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
生产:
+------+
| n |
+------+
| 1 |
| 2 |
| 3 |
+------+
但是这个:
WITH RECURSIVE cte_count (n)
AS (
SELECT 1
,"one" as `one`
UNION ALL
SELECT
n + 1
,"one" as `one`
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
产生错误:
Error Code: 1054. Unknown column 'n' in 'field list'
您能解释一下错误的原因以及解决方法吗?
WITH RECURSIVE cte_count
后面的(n)
是什么意思?
有两种写法。
没有在 cte 的名称旁边声明列名称:
WITH RECURSIVE cte_count
AS (
SELECT 1 as n
,'one' as `one`
UNION ALL
SELECT
n + 1
,'one'
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
并声明它们而无需在查询主体中为它们添加别名:
WITH RECURSIVE cte_count (n, `one`)
AS (
SELECT 1
,'one'
UNION ALL
SELECT
n + 1
,'one'
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
你可以用更抽象的方式来看待WITH RECURSIVE cte_count (n)
。
您总是需要 WITH RECURSIVE
用于递归查询,后跟它的名称(在您的情况下为 cte_count
)。
接下来是一个逗号分隔的列表,它定义了查询的属性数量以及列的相应名称(例如 (n)
)。
第二个查询中的问题是您使用 "one" as 'one'
.
引入了一个新列
尝试只写 "one"
而不是 "one" as 'one'
(两次!)并将 (n)
改为 (n, one)
来解决你的问题。
本MySQL8条查询:
WITH RECURSIVE cte_count (n)
AS (
SELECT 1
UNION ALL
SELECT
n + 1
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
生产:
+------+
| n |
+------+
| 1 |
| 2 |
| 3 |
+------+
但是这个:
WITH RECURSIVE cte_count (n)
AS (
SELECT 1
,"one" as `one`
UNION ALL
SELECT
n + 1
,"one" as `one`
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
产生错误:
Error Code: 1054. Unknown column 'n' in 'field list'
您能解释一下错误的原因以及解决方法吗?
WITH RECURSIVE cte_count
后面的(n)
是什么意思?
有两种写法。
没有在 cte 的名称旁边声明列名称:
WITH RECURSIVE cte_count
AS (
SELECT 1 as n
,'one' as `one`
UNION ALL
SELECT
n + 1
,'one'
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
并声明它们而无需在查询主体中为它们添加别名:
WITH RECURSIVE cte_count (n, `one`)
AS (
SELECT 1
,'one'
UNION ALL
SELECT
n + 1
,'one'
FROM cte_count
WHERE n < 3
)
SELECT *
FROM cte_count;
你可以用更抽象的方式来看待WITH RECURSIVE cte_count (n)
。
您总是需要 WITH RECURSIVE
用于递归查询,后跟它的名称(在您的情况下为 cte_count
)。
接下来是一个逗号分隔的列表,它定义了查询的属性数量以及列的相应名称(例如 (n)
)。
第二个查询中的问题是您使用 "one" as 'one'
.
尝试只写 "one"
而不是 "one" as 'one'
(两次!)并将 (n)
改为 (n, one)
来解决你的问题。