记录sharding-jdbc导致的sql子查询问题,多出AS sharding_gen_1

本来有个要求,就是查询出同一组F_process_key 下,版本F_deployment_version 最高的数据,我的sql如下:


SELECT
wd.*
FROM
table_wd wd
WHERE
wd.F_id = (
	SELECT
		F_id
	FROM
		table_wd
	WHERE F_process_key = wd.F_process_key 
	ORDER BY F_deployment_version DESC LIMIT 1
)
ORDER BY wd.F_id DESC;

在navicat上运行也没问题,然后就放到了mapper的xml中,并加上动态sql的条件判断

结果却出乎意料

日志打印:
在这里插入图片描述
格式化后的sql如下:

SELECT
			wd.*
		FROM
			t_ticket_workflow_deployment wd
		WHERE
			1 = 1
		AND wd.F_id = (
			SELECT
				F_id,
				F_deployment_version AS sharding_gen_1
			FROM
				t_ticket_workflow_deployment
			WHERE
				F_process_key = wd.F_process_key
			AND F_deployment_status = 2
			ORDER BY
				F_deployment_version DESC
			LIMIT 1
		)
		ORDER BY
			wd.F_id DESC

可以看到莫名其妙多了一个F_deployment_version AS sharding_gen_1,并直接导致了子查询返回两个结果,报错。

初步判断是sharding-jdbc搞的鬼。但是网上搜索了没找到有用信息

最后妥协解决方法: 子查询改成自己和自己连接查询


SELECT
	a.*
FROM
	t_ticket_workflow_deployment a,
	(
		SELECT
			F_process_key,
			MAX(F_deployment_version) v
		FROM
			t_ticket_workflow_deployment
		GROUP BY
			F_process_key
	) b
WHERE
	b.F_process_key = a.F_process_key
AND b.v = a.F_deployment_version
AND a.F_deployment_status = 2
GROUP BY
	a.F_process_key
ORDER BY
	a.F_id DESC

有知道如何解决或者问题原因的欢迎指导

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值