使用Java从配置表中创建动态查询

时间:2019-04-09 11:12:03

标签: java sql sql-server database data-structures

我需要从几个表中动态获取数据。因此,我有2个配置表来存储有关这些表的信息。一个表包含有关表列表的信息,如下所示:

TableName    TableCode    TableColumn
----------------------------------------
 a             a             a1
 a             a             a2
 b             b             b1
 b             b             b2
 b             b             b3
 c             c             c1
 c             c             c2
 d             d             d1
 d             d             d2

我还有另一个表,用于存储这些表之间的关系:

RelationshipType    TableCode1    TableCode2    TableColumn1    TableColumn2 
-----------------------------------------------------------------------------   
  inner                a            b              a1             b1
  inner                a            b              a2             b2
  inner                c            d              c1             d1
  inner                c            b              c2             b3

基于上述配置,我需要创建一个如下所示的动态查询:

select a.a1, a.a2, b.b1, b.b2, b.b3, c.c1, c.c2, d.d1, d.d2 
from b
inner join a on b.b1 = a.b1 and b.b2 = a.b2
inner join c on b.b3 = c.c2
inner join d on c.c1 = d.d1

现在,联接可以是内部,左侧或右侧,并且关系表中的插入顺序可以是任意顺序,但是在所有组合的表之间肯定存在关系。创建动态查询的最佳优化方法是什么?我是否应该在关系表中搜索最上层的表,然后创建树来查找与其他表的关系?我应该在关系表中维护一个顺序以查找最上层的表和对应的表吗?

1 个答案:

答案 0 :(得分:0)

步骤:

  1. 从Relationship_table内部联接table_list中选择*,按RelationshipType desc,TableCode1,TableCode2排序(RelationshipType的排序是因为始终先执行内部联接总是好。而TableCodes的排序是因为如果下一个关系也涉及相同的关系表中,条件需要串联)

  2. 循环遍历每一行,如果先前的表代码和当前的表代码相同,则仅将条件添加到'conditionstring'。如果不是,则将带有表名和条件的新联接添加到“ conditionstring”。将列添加到“列列表”。

  3. 现在,“选择” +列列表+“来自” +条件字符串将为您提供查询

希望这对您有帮助