from server sql 拼接統計兩個子查詢_非規範SQL的sharding-jdbc實踐,精髓內容
阿新 • • 發佈:2021-01-10
技術標籤:from server sql 拼接統計兩個子查詢
原創:小姐姐味道(微信公眾號ID:xjjdog),歡迎分享,轉載請保留出處。
在《“分庫分表” ?選型和流程要慎重,否則會失控》中,我們談到處於驅動層的sharding-jdbc。開源做到這個水平,已經超棒了,不像tddl成了個太監。但還是有坑。
不過不能怪框架,畢竟有些sql,只有程式和鬼能懂。
select from order where orderCode = #{item}
不支援的操作
分庫分表後,就成為了一個閹割型的資料庫。很多sql的特性是不支援的,需要使用其他手段改進。以下以3.0.0版本進行描述。
distinct
sharding-jdbc不支援distinct,單表可使用group by進行替代。多表聯查可使用exists替代
select DISTINCT a, b, c, d from tablewhere df=0
改成
select a, b, c, d from tablewhere df=0group by a, b, c, d
having
sharding-jdbc不支援having,可使用巢狀子查詢進行替代
union
sharding-jdbc不支援union(all),可拆分成多個查詢,在程式拼接
關於子查詢
sharding-jdbc不支援在子查詢中出現同樣的表,如
以下可以⇒
SELECT COUNT(*) FROM (SELECT * FROM t_order o)
以下報錯⇒
SELECT COUNT(*) FROM (SELECT * FROM t_order o WHERE o.id IN (SELECT id FROM t_order WHERE status = ?))
由於歸併的限制,子查詢中包含聚合函式目前無法支援。
mybatis 註釋
sharding-jdbc不支援sql中的