MySQL中SQL脚本里的表别名T的作用是什么?
为什么这段SQL里的
t是必须的? 嘿,这个问题问得特别到位!咱们来一步步搞清楚这段SQL里的t到底起啥作用:
首先,t是内层子查询的临时表别名。在SQL语法里,当你把一个查询的结果当作“临时表”来进行二次查询的时候(也就是这里括号里的整个SELECT * FROM users ... LIMIT 3部分),必须给这个临时结果集起一个别名——数据库需要一个“名字”来识别这个临时表,不然它会报错说找不到要查询的表。
咱们来拆解这段SQL的完整逻辑,你就更明白t的必要性了:
- 内层子查询:先筛选出
spillover_sponsor等于你传入值的所有用户,然后按unique_id倒序排列,取最新的3条记录 - 外层查询:把内层得到的这3条记录(通过别名
t来引用这个临时结果)再按unique_id正序排列,取第一条——说白了就是拿到这3个符合条件的用户里,unique_id最小(也就是最早创建)的那个
举个直观的例子:如果内层子查询返回的3条记录unique_id是10、9、8(倒序取的最新3个),外层通过t引用这个结果后正序排列,取第一个就是8,完美实现了“取最新3个里最老的那个”的需求。
另外补充一句:别名不一定非得是t,你换成temp_users或者其他合法的名字都可以,只是大家习惯用这种短别名来简化代码而已~
内容的提问来源于stack exchange,提问作者M'Baku
相关产品推荐
相关产品推荐

