多表連線分頁問題
阿新 • • 發佈:2019-01-31
專案中有個業務需要多張表的一個連線,還需要根據{size}和{offset}進行分頁,這個時候,問題來了,表連線如果是一對一關係,正常在sql最後分頁,什麼事都沒有,可是,一旦有多對多關係和一對多關係,這種分頁明顯用不了了!為什麼???
我們可以分析一下:假如,t_student有10條資料,t_course表有多條,一個同學可以選擇多個課程,一個課程可以屬於多個學生,典型多對多,因此需要一張關係表t_relation,假如在t_student表中的1條資料對應關係表的5條資料,那麼,我們如果按照t_course left join t_relation .... left join t_relation,那麼查詢出來的是50條資料,分頁!而單表t_student只有10條,如果我需要t_student中的前兩條,按照上述分頁是查出10條,那麼,分頁結果是什麼???明顯不符合要求,因此解決此辦法除了儲存過程的方法,用傳統表連線來解決則只能先按分頁查詢t_student表然後讓查詢出來的表作為虛表再做表連線,後面沒有分頁來處理,比如:
select ...
from (select ... from t_student limit 0,2) dual1
left join t_relation on t_relation.sid=t_student.id
left join t_course on t_course.id=t_relation.cid