1. 程式人生 > >Oracle級聯查詢

Oracle級聯查詢

增刪改查是最基本的業務,也是變化和要求最多的業務,那麼原始需求如下:

  • 假如一個A對應N個B,一個B對應N個C,一個C對應N個D
  • 資料量為 幾百 幾千 幾萬 百萬

    有什麼比較好的方法把這個表格查出來嗎?

一拍腦袋,我就想出兩個辦法:

  1. 先查10個A,迴圈查對應的B…(非常慢,滿足了分頁需求
  2. 把四張表left join到一起,然後查20條資料出來(速度較快,但是沒有滿足分頁需求,而且查出來的資料一對多的關係被隱藏在重複的A、B、C之間了,需要做去重處理
  3. 先查10個A,然後在四張表的join中寫一個子查詢 “and id in ( select id from A where… )”,相當於先查10個A然後再根據這10個A查詢四張表的對應資料,只不過子查詢稍微快點(優點是彌補了方法2中分頁的缺點,但是方法2的其他缺點沒有改善

暫時就想到上面這些,不知道有沒有更好的辦法,歡迎留言~

需求總是無盡的,那麼新的需求1如下:

  • 若表D中存在一個時間欄位,現在要求在表格中不需要所有的D資料,只要時間最大\新的D資料

該如何生成新的表格?

簡單的辦法不用怎麼想,儘管不是很好用,如下:

  1. 根據原始需求的方法3做改進,讓他按照時間排序,然後我在使用的時候,每當遇到需要處理D的情況,只取最上面一條 (自然,這很不優雅