可搜索,可注册,可登录,致敬逗比大佬!尽在救援版逗比根据地 dbgjd.com
投稿文章 | 广告合作 | Telegram 群组 / 公告频道 / 使用教程

SQL的Ambiguous错误

News rafaelamoffit21 112℃ 0评论

翻阅笔记发现我在去年的时候记录了一个问题,关于SQL的Ambiguous的错误,笔记里的错误信息是Ambiguous column name,但是我按照笔记里的场景再次执行SQL的时候,发现报错信息已经不是这个了,而是换成了1052 - Column 'ID' in where clause is ambiguous。姑且不去思考是不是当时记录错了,反正错误的原因只有一个,那就是多个表关联的时候,可能某个字段在两个以及两个以上的表中都存在,但是在做条件或者查询字段的时候没有给其指定表而导致的错误,可以理解为有重复的列或者是歧义的列。

还原场景如下:
因SQL太长,我就简化一下吧

1
select ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID where ID=1001

这个SQL大约大约就是Ambiguous错误的主要场景。查询的字段IDT_USERT_DEPT中都存在,但是并没有指定是谁的ID,如果这个SQL中没有WHERE条件,那么也是可以执行的。

1
select ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID

如果给查询的字段加了表名,那么WHERE条件没有加表名,也会出现Ambiguous的错误。

1
select T_DEPT.ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID where ID=1001

除此之外,以下两种情况也会出现Ambiguous的错误(order bygroup by等等)。

1
select ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID order by ID

或者

1
select ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID order by T_DEPT.ID

但是下面这个SQL可以执行。

1
select T_DEPT.ID from T_USER INNER JOIN T_DEPT ON T_USER.ID=T_DEPT.ID order by ID

其实这种错误很简单,但是当SQL复杂到一定程度,表关联特别多的时候就很容易出现了,所以如果一旦SQL中的报错信息有Ambiguous这个关键字,那么基本上就是重复列或者歧义列的原因了。避免的办法也很简单,表关联多的时候尽量给每个表都加上唯一的别名。

转载请注明:逗比根据地 » SQL的Ambiguous错误

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址