[問題]通過接口進行多表連接查詢的問題


【問題描述】

假設現在有一個服務器,上面有一個數據庫一個程序,你不能直接遠程連接它然后SQL查詢,但是可以通過發送請求的方式調用接口進行數據查詢。但是一個接口對應一張單表,接口只有查詢該接口對應的表的信息。
現在有一個問題就是,如果我要查詢多表連接的數據,在服務器上的程序代碼無法更改的情況下該如何實現?

【問題分析】

首先,了解該場景中的限制條件:

1、每個接口只能針對一張表進行查詢。

2、多表連接包括外連接、內連接、交叉連接:

  左外連接: 

select * from table1 a left out join table2 b on a.name = b.name

      右外連接

select * from table1 a right out join table2 b on a.name = b.name

     完全外連接

select * from table1 a full out join table2 b on a.name = b.name

    內連接

select * from table1 a inner join table2 b on a.name = b.name

    交叉連接

select * from table1 a cross join table2 b where a.name = b.name

【解決方案】

 在了解了多表連接的所有類型以后,剩下的就是怎么實現的問題。

 最直接的方式就是創建一個查詢類,在類中創建以上的多表連接方法,分別進行具體代碼的實現即可。當然也可以通過策略模式,為每一個類型的多表連接創建一個類,分別進行代碼實現。

 以左外連接為例:

 做外連接查詢的查詢結果要求 屬於左表的所有行數據都必須查詢出來,而右表則需要根據條件查詢出結果與左表進行匹配,若左表中的數據在右表中找不到對應結果,則最終結果屬於右表的字段要用null表示。

所以:

        1、創建一個結果類Result,包括table1,table2的所有字段。

        2、創建一個Map集合,key為條件字段值,value為Result

        3、首先根據條件查詢出左表table1的所有數據,並寫入集合Map<String,Result>中。

        4、根據條件查詢出右表table2的所有數據,並根據key值,將所有值寫入Result類中。

        5、獲取集合的value,並返回。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM