MySQL 5.7 子查詢排序失效如何解決?

MySQL 5.7 子查詢排序失效如何解決?

mysql中子查詢排序失效的解決方法

mysql版本5.7.13中,有一種常見問題是子查詢中的排序不會被保留。這給開發人員帶來了困擾,因為他們需要在子查詢中對數據進行排序,然后將結果用于外部查詢。

為了解決該問題,可以采用以下兩種方法:

方法一:使用窗口函數

對于版本5.8以上的mysql,可以使用窗口函數來解決此問題。窗口函數允許開發人員在數據分組后對其進行排序,從而保留排序結果。然而,5.7版本不支持窗口函數。

方法二:預先計算并關聯

對于5.7版本mysql,可以采用以下步驟:

  1. 先按分組字段計算每個分組的最大create_time,并將其存儲在一個中間表中。
  2. 將中間表與原始表關聯,檢索具有最大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
喜歡就支持一下吧
點贊12 分享