本來有個要求,就是查詢出同一組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
有知道如何解決或者問題原因的歡迎指導