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

运行后的结果如下图:

 

 

  

目前就想到这些,后续如果有遇到其他的情况的话会继续更新。

上述内容若有错误,欢迎大家批评指正。

欢迎大家在评论区进行讨论和交流。

posted @   新的一年不出BUG  阅读(747)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示