You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CTE中使用SELECT *时,列顺序是否能得到保证?

关于UNION ALL中CTE的SELECT *列顺序问题

在你提供的SQL示例里,两处SELECT *完全能保证沿用来源CTE定义的列顺序,原因如下:

  • CTE本质是数据库生成的临时结果集,定义时就明确了列的名称、顺序和数据类型,数据库会为其维护完整的元数据(包括ordinal_position这类列顺序标识),和物理表的元数据逻辑一致。
  • 对于UNION ALL操作,当两侧查询的结果集结构完全匹配(列数、数据类型、列名一致)时,数据库会严格按照各自CTE定义的列顺序进行合并,不会出现列错位的情况。你的示例中cte_a和cte_b都明确定义了col_1、col_2的顺序,所以完全安全。

额外提醒

虽然当前场景下写法没问题,但不建议依赖SELECT *:

  • 如果后续修改CTE结构(比如新增、删除或调整列顺序),SELECT *会自动引入变更,很可能导致UNION ALL因结构不匹配报错,甚至出现数据错位的隐蔽问题。
  • 显式列出列名(比如SELECT col_1, col_2 FROM cte_a)的写法更清晰、健壮,能避免这类潜在风险。

内容的提问来源于stack exchange,提问作者IgorM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 06:02:11