首页 > 解决方案 > MySQL 8 递归 CTE 错误代码:1054。未知列

问题描述

这个 MySQL 8 查询:

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;

产生错误:

错误代码:1054。“字段列表”中的未知列“n”

你能解释一下为什么以及如何解决这个错误吗?

(n)之后是什么意思WITH RECURSIVE cte_count

标签: mysqlcommon-table-expressionrecursive-query

解决方案


有两种方法可以写这个。
没有在 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;

推荐阅读