2012-09-13 53 views
0

我有一个任务来构建基于现有查询与用户选择字段的动态查询(或算法)。让我来解释:构建基于现有查询的动态查询(或算法)

可以说我有一个功能

ConstructQuery(字符串inputQuery,字符串[] mandatoryTables,字符串[] userFields)有2个输入参数:

  • inputQuery:查询字符串与许多字段和表,联接和那里的条件
  • mandatoryTables:强制表
  • userFields列表:字段列表,用户在一些网站或桌面应用程序选择

函数将不得不返回带有表和联接的优化查询,这些查询只有在查询成功时才需要。

inputQuery是例如这样的构造:

SELECT 
    Table1.SomeFieldA, 
    Table2.SomeFieldB, 
    Table2.SomeFieldC, 
    Table3.SomeFieldD 
FROM Table1 
JOIN Table2 ON Table1.Code = Table2.Code 
JOIN Table3 ON Table2.Code = Table3.Code 
WHERE Table1.SomeConditionField = "xyz" 

userFields是:SomeFieldB,SomeFieldC

mandatoryTables:表1

所以预计查询:

SELECT 
    Table2.SomeFieldB, 
    Table2.SomeFieldC 
FROM Table1 
JOIN Table2 ON Table1.Code = Table2.Code 
WHERE Table1.SomeConditionField = "xyz" 

我问题是:有没有一种解决这类公关的工具oblems或你们如何解决它?我想二叉树的...

问候, 贾尼

回答

1

这是一些所谓的加盟去除。这是非常困难的。只是解析查询是非平凡的,那么你必须分析语义,考虑什么是唯一键,什么是foreeign键有机会删除一些表。在你的例子中:算法必须知道table3.code是唯一的,并且是table2.code的外键,否则查询不等价。

首先生成正确的查询可能会更容易。这是一些ORM所做的。