[问题]通过接口进行多表连接查询的问题

【问题描述】

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

原文地址:https://www.cnblogs.com/liuyp-ken/p/12973711.html