我需要从几个表中动态获取数据。因此,我有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
现在,联接可以是内部,左侧或右侧,并且关系表中的插入顺序可以是任意顺序,但是在所有组合的表之间肯定存在关系。创建动态查询的最佳优化方法是什么?我是否应该在关系表中搜索最上层的表,然后创建树来查找与其他表的关系?我应该在关系表中维护一个顺序以查找最上层的表和对应的表吗?
答案 0 :(得分:0)
步骤:
从Relationship_table内部联接table_list中选择*,按RelationshipType desc,TableCode1,TableCode2排序(RelationshipType的排序是因为始终先执行内部联接总是好。而TableCodes的排序是因为如果下一个关系也涉及相同的关系表中,条件需要串联)
循环遍历每一行,如果先前的表代码和当前的表代码相同,则仅将条件添加到'conditionstring'。如果不是,则将带有表名和条件的新联接添加到“ conditionstring”。将列添加到“列列表”。
现在,“选择” +列列表+“来自” +条件字符串将为您提供查询
希望这对您有帮助