SQL多层嵌套查询中t2(列名)类别名语法含义咨询
语法作用解释
你提到的t2 (lookupweekid)属于SQL标准中派生表(也叫内联视图)的列显式命名语法,各部分含义如下:
- 内层括号包裹的
select lookupweekid-1 from lookupday where dateoftransaction = date是一个子查询,执行后会生成一张临时的派生表 t2是给这张临时派生表起的表别名,方便外层查询引用- 紧随
t2的括号里的lookupweekid,是给这个子查询返回的唯一计算列自定义的列名,后续外层查询里的t2.lookupweekid就是引用这一列的数值。
语法规则
- 该语法的通用格式为:
(子查询) 派生表别名 (列1别名, 列2别名, ..., 列N别名) - 括号内的别名数量必须和子查询返回的列数完全一致,别名顺序和子查询返回列的顺序一一对应
- 属于SQL标准定义的通用语法,PostgreSQL、MySQL 8.0及以上、Oracle、SQL Server等主流数据库都支持该写法
多列场景示例:如果子查询返回2列,写法如下,执行后派生表t的两列名分别为user_id、order_count
(select id, count(order_id) from user_order group by id) t (user_id, order_count)
等价写法对比
你提问的片段和下面的写法效果完全一致,只是把列别名定义的位置从子查询内部移到了派生表别名后面:
(select lookupweekid-1 as lookupweekid from lookupday where dateoftransaction = date) t2
结合完整SQL的其他同逻辑用法说明
你提供的完整SQL里出现的t3 (start_of_week)、t4 (end_of_week)也是相同的逻辑:
- t3是返回
dateoftransaction列的派生表,括号里的start_of_week是给该列指定的别名 - t4是返回
dateoftransaction列的派生表,括号里的end_of_week是给该列指定的别名
内容的提问来源于stack exchange,提问作者mert
相关产品推荐
相关产品推荐

