記錄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

有知道如何解決或者問題原因的歡迎指導

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章