多表连接查询时,两个表中字段名重读导致 java.sql.SQLSyntaxErrorException: Duplicate column name ‘id‘

         最近在写一个博客的项目时,就是在进行博客表与博客分类表进行连接查询时,报了java.sql.SQLSyntaxErrorException: Duplicate column name 'id',网上查了查说的是id字段重复了,就是t_blog、t_type表中定义的主键都是id才导致的。

 

错误日志如下:

 

 2020-09-03 17:46:35.071 ERROR 10824 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: 
 ### Error querying database.  Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Error: Method queryTotal execution error of sql : 
  SELECT COUNT(1) FROM ( select * from t_blog b
         left join t_type t on b.type_id = t.id
          WHERE  b.title like "%" ? "%"
             
             
                 and b.type_id = ?
             
             
                 and b.recommend = ? ) TOTAL 
 ​
 ### The error may exist in file [E:\idea\SpringBoot\blog_mybatisplus\target\classes\mapper\BlogMapper.xml]
 ### The error may involve defaultParameterMap
 ### The error occurred while setting parameters
 ### Cause: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: Error: Method queryTotal execution error of sql : 
  SELECT COUNT(1) FROM ( select * from t_blog b
         left join t_type t on b.type_id = t.id
          WHERE  b.title like "%" ? "%"
             
             
                 and b.type_id = ?
             
             
                 and b.recommend = ? ) TOTAL 
 ] with root cause
 ​
 java.sql.SQLSyntaxErrorException: Duplicate column name 'id'

 

第一个解决方法就是把两个表相同的字段名改一下,说实话有点麻烦

第二个解决方法就是把sql语句改一下,加个别名

 

          注意:同样的这个别名也不能是另一表中的字段,如果是,还会报错

 

最重要的一点:其实这种错误,可以完全避免,只要你全写成b.*,t.*就不会出现这种错误,当然了,这样会导致查询数据的速度变慢,平时自己耍到无所谓,到了公司绝对不能这样做,需要哪几个字段的数据就查哪几个字段的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值