91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何寫一對多分頁的SQL

發布時間:2021-11-08 15:57:27 來源:億速云 閱讀:89 作者:柒染 欄目:建站服務器

這篇文章給大家介紹如何寫一對多分頁的SQL,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

導讀MySQL一對多的數據分頁是非常常見的需求,比如我們要查詢商品和商品的圖片信息。但是很多人會在這里遇到分頁的誤區,得到不正確的結果。

MySQL一對多的數據分頁是非常常見的需求,比如我們要查詢商品和商品的圖片信息。但是很多人會在這里遇到分頁的誤區,得到不正確的結果。今天就來分析并解決這個問題。

問題分析

我們先創建一個簡單商品表和對應的商品圖片關系表,它們之間是一對多的關系:

如何寫一對多分頁的SQL

然后我分別寫入了一些商品和這些商品對應的圖片,通過下面的左連接查詢可以看出它們之間具有明顯的一對多關系:

SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL 
FROM PRODUCT_INFO P 
         LEFT JOIN PRODUCT_IMAGE PI 
                   ON P.PRODUCT_ID = PI.PRODUCT_ID

如何寫一對多分頁的SQL

按照傳統的思維我們的分頁語句會這么寫:

如何寫一對多分頁的SQL

當我按照預想傳入了(0,2)想拿到前兩個產品的數據,結果并不是我期望的:

2020-06-21 23:35:54.515 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : ==>  Preparing: SELECT P.PRODUCT_ID, P.PROD_NAME,PI.IMAGE_URL FROM PRODUCT_INFO P LEFT JOIN PRODUCT_IMAGE PI ON P.PRODUCT_ID = PI.PRODUCT_ID limit ?,?  
2020-06-21 23:35:54.541 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : ==> Parameters: 0(Long), 2(Long) 
2020-06-21 23:35:54.565 DEBUG 10980 --- [main] c.f.m.mappers.ProductInfoMapper.page     : <==      Total: 2 
page = [ProductDTO{productId=1, prodName='杯子', imageUrls=[http://asset.felord.cn/cup1.png, http://asset.felord.cn/cup2.png]}]

我期望的兩條數據是杯子和筆記本,但是結果卻只有一條。原來當一對多映射時結果集 會按照多的一側進行輸出(期望4條數據,實際上會有7條),而前兩條展示的只會是杯子的數據(如上圖),合并后就只有一條結果了,這樣分頁就對不上了。那么如何才能達到我們期望的分頁效果呢?

正確的方式

正確的思路是應該先對主表進行分頁,再關聯從表進行查詢。

拋開框架,我們的SQL應該先對產品表進行分頁查詢然后再左關聯圖片表進行查詢:

SELECT P.PRODUCT_ID, P.PROD_NAME, PI.IMAGE_URL 
FROM (SELECT PRODUCT_ID, PROD_NAME 
      FROM PRODUCT_INFO 
      LIMIT #{current},#{size}) P 
         LEFT JOIN PRODUCT_IMAGE PI 
                   ON P.PRODUCT_ID = PI.PRODUCT_ID

這種寫法的好處就是通用性強一些。但是MyBatis提供了一個相對優雅的路子,思路依然是開頭所說的思路。只不過我們需要改造上面的Mybatis XML配置:

如何寫一對多分頁的SQL

大部分情況下分頁是很容易的,但是一對多還是有一些小小的陷阱的。一旦我們了解了其中的機制,也并不難解決。

關于如何寫一對多分頁的SQL就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

sql
AI

兴仁县| 迁西县| 仲巴县| 富平县| 延寿县| 安岳县| 栖霞市| 连城县| 手游| 彝良县| 左贡县| 桐梓县| 珠海市| 上栗县| 翁牛特旗| 高尔夫| 凯里市| 哈尔滨市| 彭泽县| 日土县| 古交市| 伊吾县| 凤阳县| 武城县| 宝鸡市| 平武县| 曲松县| 墨竹工卡县| 壤塘县| 湖南省| 延吉市| 韶山市| 崇仁县| 杨浦区| 克拉玛依市| 民勤县| 儋州市| 鄂尔多斯市| 沧州市| 达尔| 郁南县|