mysql中子查詢排序失效的解決方法
在mysql版本5.7.13中,有一種常見問題是子查詢中的排序不會被保留。這給開發人員帶來了困擾,因為他們需要在子查詢中對數據進行排序,然后將結果用于外部查詢。
為了解決該問題,可以采用以下兩種方法:
方法一:使用窗口函數
對于版本5.8以上的mysql,可以使用窗口函數來解決此問題。窗口函數允許開發人員在數據分組后對其進行排序,從而保留排序結果。然而,5.7版本不支持窗口函數。
方法二:預先計算并關聯
對于5.7版本mysql,可以采用以下步驟:
- 先按分組字段計算每個分組的最大create_time,并將其存儲在一個中間表中。
- 將中間表與原始表關聯,檢索具有最大create_time的記錄。
以下sql代碼展示了該方法:
select t2.id, t1.* from ( select max(create_time) as create_time, user_id, product_id from demo group by user_id, product_id ) t1 left join demo t2 on t1.user_id = t2.user_id and t1.product_id = t2.product_id and t1.create_time = t2.create_time
通過這種方法,可以準確地獲取同一個用戶同一產品的最新記錄,而不會受子查詢排序失效的影響。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END