Mysql填坑笔记 | FROM后的子查询与表连接
在Mysql查询语句FROM的后面使用子查询时坑实在太多了。为方便描述和演示,首先创建了如下数据表(命名为example),其中id为primary key:
坑1. 在From后,对每一个由子查询产生的新表须指定别名(alias)。
相关演示如下,对上述的example表执行如下操作。若对由子查询产生的表不添加别名(代码1),则会报错误Error Code: 1248. Every derived table must have its own alias;添加别名后(代码2),则可正常执行。
/*代码1 报错*/
select * from example, ( select * from example )
/*代码2 正常运行*/
select * from example, ( select * from example ) as t
坑2. 在From后,对两个表进行连接,若两个表中存在相同名称的列,则在指定连接后的表中的列时需具体书写:表名.列名。
对上述的example表执行如下操作,代码3会报错Error Code: 1052. Column 'id' in field list is ambiguous;代码4可以正常运行。
/*代码3 报错*/
select id
from example, (
select * from example
) as t
/*代码4 正常运行*/ select t.id from example, ( select * from example ) as t
坑3. 在From后,对两个表进行连接,若两个表中存在相同名称的列,亦可进行连接,不会产生冲突(如代码4)。
无需对相同列名的列进行如下的重命名(下列代码也可正常运行,但书写比较麻烦):
/*代码5*/
select *
from example, (
select id as id2, A as A2, B as B2 from example
) as t
坑4. 在From后可进行多表(大于两个表)的连接。
如下代码可正常运行:
/*代码6*/ select * from example as a left join example as b on a.id = b.id left join example as c on b.id = c.id
运行后的结果如下图:
目前就想到这些,后续如果有遇到其他的情况的话会继续更新。
上述内容若有错误,欢迎大家批评指正。
欢迎大家在评论区进行讨论和交流。
本文来自博客园,作者:新的一年不出BUG,转载请注明原文链接:https://www.cnblogs.com/buchubug/p/15868519.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通