我有一项任务是根据用户选择的字段的现有查询构建动态查询(或算法)。让我解释一下:
假设我有一个功能
ConstructQuery(string inputQuery,string [] mandatoryTables,string [] userFields),带有2个输入参数:
函数必须返回带有表和连接的优化查询,只有查询才能成功。
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:Table1
所以预期的查询是:
SELECT
Table2.SomeFieldB,
Table2.SomeFieldC
FROM Table1
JOIN Table2 ON Table1.Code = Table2.Code
WHERE Table1.SomeConditionField = "xyz"
我的问题是:是否有某种工具可以解决这类问题或者你们如何解决这个问题?我在想二叉树......
此致 贾尼
答案 0 :(得分:1)
这就是所谓的连接删除。这(非常)很难。只是解析查询是不重要的,那么你必须分析语义,考虑什么是唯一键,什么是foreeign键有机会删除一些表。在您的示例中:算法必须知道table3.code是唯一的,并且是table2.code的外键,否则查询不等效。
首先生成正确的查询可能更容易。这就是一些ORM所做的事情。