首页 > Mysql > Mysql使用别名多表查询join时问题

Mysql使用别名多表查询join时问题

2014年3月11日 发表评论 阅读评论

今天在写一个sql语句时遇到一个问题,问了好多人才给出了一个答案,当然以我们目前对mysql的了解也不知道这个答案到底是对错,不过此处做为唯一合理的答案,我就当做正确答案了,如果博主下面的说法是错误的,欢迎大家及时指出!

下午在对t1,t2,t3这3个表进行多表管理查询时,爆出了一个让我“莫名其妙”的错误。最初的时候我的sql语句是这样书写的:

SELECT * FROM t1, t2 LEFT JOIN t3 ON (t1.id=t3.id) WHERE t1.id=t2.id

但是在执行的时候报错“Unknown column t1.id”,以前博主习惯利用AS 表别名来进行多表关联查询,这让博主很凌乱,一时不知道如何下手解决了!

后来博主把自己的sql语句写的正规了一点,如下:

SELECT * FROM t1 INNER JOIN t2 LEFT JOIN t3 ON (t1.id=t3.id) WHERE t1.id=t2.id

然后再次执行,发现ok了!不再报错了,博主顿时欣喜若狂啊,但是博主怀着剖根问底的精神,对前者报错很好奇错在了那里!对mysql有了解的人都知道用“,”把表名分开和INNER JOIN是等同的,那么为什么我这里报错了那?

博主动用了自己所有的关系也查看了一些资料(都不知道咋问谷歌啊),最终一个QQ群的叫做“蜀都-Rory”的同学给博主解释了一下,原来前者被mysql解释器解释以后实际执行时是这样子的:

SELECT * FROM t1,( t2 LEFT JOIN t3 ON (t1.id=t3.id)) WHERE t1.id=t2.id

这就把中间部分被当做一个子查询了,而子查询在mysql执行的时候是优先执行的,所以就没有和t1关联,所以自然就报前面提到那个错误了!

分类: Mysql 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.
您必须在 登录 后才能发布评论.