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,并返回。

  • 相关阅读:
    将文献的bibtex引用格式批量转换为bibitem格式参考文献
    ubuntu下webbench作网站压力测试教程【webbench安装】
    Windows10安装虚拟机VMware并且安装ubuntu16系统
    ubuntu 16.04系统下解决MySQL 的root用户重置密码问题
    elementui 中 日期时间插件 结束时间大于开始时间
    SqlDbType 与 .Net 数据类型对照表
    可用的datatable转换成List<T>
    【beyond compare4 秘钥】亲测4.1.6可用
    winform 自定义控件圆按钮插件
    net framework 4.0 wcf发布到IIS
  • 原文地址:https://www.cnblogs.com/liuyp-ken/p/12973711.html
Copyright © 2011-2022 走看看