2013-11-22 50 views
0

将未知数量的结果集合并为单个可排序的分页结果集的最佳策略是什么?在sql server中合并未知数量的结果集

背景,我有一个相当复杂的查询,用户可以建立N次,然后一次提交所有这些查询。 N个查询都返回相同的格式化结果集,但具有非常不同的WHERE子句。

我可以使用SPROC根据其输入生成动态sql语句,或者分别执行每个查询并在代码中处理它,但是有一个更好的方法可以实现它。有没有解决这个问题的最佳解决方案?

回答

0

只要查询都返回相同格式的结果,你可以联合在一起,并使用ORDER BY来

select col1, col2, col3 from tablea where ... 
union 
select col1, col2, col3 from tablea where ... 
order by col1, col2 

如果你关心排序结果大约知道哪个查询返回的结果,你会需要添加一个表示查询的额外列。

根据生成的N个查询的大小,还可能存在总联合查询的大小问题。在试图以这种方式组合许多查询并最终完成各个数据库调用并将结果合并到java代码中时,我碰到JDBC限制查询大小的问题。

+0

您是否建议仅根据用户请求的结果集数量更改N来动态构建语句? – user2532715

+0

如果查询基于用户输入,我不会看到您有选择。看起来你可以在没有动态生成查询的情况下做到这一点的唯一方法是,如果你能够提前列举所有可能的组合,然后在运行时选择正确的查询。 – GregA100k