这是个sql错误,今天遇到的一个bug,姑且把标题叫做 歧义列吧
项目中有这样一个写法 select *,ClasName From Class order by ClassName 这个是最终的生成语句。
这个语句加粗部分是没有任何错误的。只是结果集合中会有2个相同的列 "ClassName",但是如果 order by的话,就会报
"Ambiguous column name" 的错误!如果直接写出这样的语句也许很容易就发现错误,但是由于项目中的sql是
根据业务逻辑动态拼接的。所以你不容易发现这样的错误。
其实这里有一个地方写的非常不好。就是那个* ,* 号已经囊括了所有的列。导致的重复列的出现。然后order by,或者进行聚合,group 等等操作
都会造成歧义,其实这是个不好的习惯。任何时候(在项目中)最好都不要用 * 来偷懒,项目中之所以是用 * 来替代,估计是因为项目中那张表的字段太多了。
而且* 会带来很多的开销。应该尽可能只搜索业务需要查询的列。
另外我们在innner join 等连接查询的时候,经常会用表名.列名 来标识某一列。如果不加上也会出现 “Ambiguous column name” 的错误。
问题很简单,但是还是记录下来,好记性不如一个烂笔头