【ssh 分页问题】ssh开发,分页时mysql报duplicate column,求救

ssh开发,数据库用的mysql。
分页时,需获取数据总函数totalCount,进一步得到totalPage,获取totalCount的代码(略去绑定参数、入参检查等代码):

 /**
 * 获取总记录数
 */
protected int getTotalCount(Session s, String sql){
    //构建count查询
    sql = "SELECT COUNT(1) FROM (" + sql + ") tmp";
    Query countQuery = s.createSQLQuery(sql);
    //输出结果
    List countList = countQuery.list();
    return (Integer)countList.get(0);
}

以上代码在特殊情况下报“Duplicate column name 'xxxx'”,例:
user表字段:**_user_id_**, login_name, passwd, ...
user_detail表字段:user_detail_id, user_id, address, ...
查询sql(**_代号SQL1_**):select * from user u inner join user_detail ud on u.user_id = ud.user_id

最终生成的查totalCount的sql(代号SQL2)是:
select count(1) from (
select * from user u inner join user_detail ud on u.user_id = ud.user_id
) tmp
执行报错,原因是user、user_detail表都有user_id字段,SQL1出来的结果包含了重名字段user_id,在SQL2中引用成tmp表时就会报重名错误。

想请教问题如下:
1、oracle中执行SQL2就不会报错,有没有办法改变mysql的设置使得执行SQL2的时候不再报错?
2、有没有其它的方法计算totalCount

小鲜肉写过大侠们了。

2个回答

你讲select count(1) from 改为select count(*) 试试 我之前用hibernate查询记录数想用count 1提高检索速度 但是当时报错 改了之后就好使了 或许是个bug

count(1)和count(*)都试过了,都报错=_=

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐