zoukankan      html  css  js  c++  java
  • [问题]通过接口进行多表连接查询的问题

    【问题描述】

    假设现在有一个服务器,上面有一个数据库一个程序,你不能直接远程连接它然后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,并返回。

  • 相关阅读:
    团队冲刺第八天
    团队冲刺第七天
    团队冲刺第六天
    团队冲刺第五天
    找水王
    团队冲刺第四天
    团队冲刺第三天
    团队冲刺第二天
    团队冲刺第一天
    spring冲刺计划
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/12973711.html
Copyright © 2011-2022 走看看