除了别名外,CTE 中的选项列表还使用什么?

What for options list in CTE is used besides aliasing the columns?

MySQL 中的通用 Table 表达式中的参数是否仅用于别名列或它们是否提供任何其他实用程序?

例如,如果我有以下 CTE:

WITH cte_name (column1_frinedly_name, column2_friendly_name) AS (
    SELECT column1, column2
    FROM tables
)
SELECT *
FROM cte_name;

...它 returns 与以下结果相同:

WITH cte_name AS (
    SELECT column1 as column1_frinedly_name, column2 as column2_friendly_name
    FROM tables
)
SELECT *
FROM cte_name;

除了重命名结果列之外,还有其他原因会使用 CTE 的带括号的参数吗?

您还可以为没有有用名称的列指定别名,例如使用表达式:

mysql> with cte (x, y, z) as ( select 1+1, concat('a','b','c'), null ) select * from cte;
+---+------+------+
| x | y    | z    |
+---+------+------+
| 2 | abc  | NULL |
+---+------+------+

为 CTE 中的所有列声明不同的名称很重要。不允许重复的列名。因此,如果在您的 CTE 中定义的查询是一个连接或类似的东西,那么给列名称可能很重要。