mysql中为查出来的数据加序号,以及left join序号混乱解决办法

mysql给查询出来的信息再加一个字段显示序号。

mysql中可以这样写

SELECT
	a.id id,
	a.client_id clientId,
	a.create_time createTime,
	a.update_time updateTime,
	@y:=@y + 1 AS num
FROM
	(SELECT @y:= 0) c,
	app_info a


这样写直接在数据库中运行是没有问题的,但是在hibernate中createSQLQuery这样是会报错的。

解决方案是在“:”前面加“\\”。

SELECT
	a.id id,
	a.client_id clientId,
	a.create_time createTime,
	a.update_time updateTime,
	@y\\:=@y + 1 AS num
FROM
	(SELECT @y\\:= 0) c,
	app_info a



-------------------------------------------------------------------------------分       割       线----------------------------------------------------------------------


后来发现个问题:单表查的时候没问题,但是如果用left join其它表的话就会出现序号列是乱的情况。其实序号列也是从1到最后,但是顺序是乱的。

以下为遇到问题的语句:

SELECT
	a.userid id,
	a.username username,
	a.reg_time regTime,
	@y :=@y + 1 AS num
FROM
	(SELECT @y := 0) c,
	account_user a
LEFT JOIN app_info p ON a.reg_source = p.client_id
ORDER BY
	a.reg_time DESC


这个SQL查出的结果如下:




order by num 查询结果:



至于之所以造成序号乱掉的原因目前还不是很清楚,但解决办法后来偶然间发现了。

解决办法:上面出现问题的SQL语句“account_user a LEFT JOIN app_info p on a.reg_source = p.client_id” 中,为client_id这个字段加一个唯一性约束。

我的client_id字段在写入数据之前会在程序里做一个是否唯一的校验,也就是说这个client_id在数据库中可以保证是没有重复的,但是还是不行,会乱掉,只有为其加一个唯一约束,才可以解决(PS:但是不知道这样解决是否是问题的根本所在,待以后发现,或者高人指点)。


加唯一约束:


alter table app_info add unique (client_id)


------------------------------------------------------分       割       线-------------------------------------------------------------------


参考链接:

http://blog.csdn.net/chentravelling/article/details/47978021

http://blog.csdn.net/guin_guo/article/details/49975431

http://blog.163.com/shu_xiangege/blog/static/186644450201532832452361/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值