我想创建一个查询,根据应用的Where过滤器访问不同的表。
例如,如果像这样查询预定义查询:
Select A,B,C,D from the_query
Where A>0 and A<5
[Gets data from source table A0to5_Table)
Select A,B,C,D from the_query
Where A>=5 and A<10
[Gets data from source table A5to10_Table)
所有源表都具有相同的架构。我想要的是查询中的CASE类型语句,案例是基于Where过滤器。
是否可以使用SQL(PostgreSQL或SQL Server)执行此操作?或者是使用带参数的存储过程的唯一选项吗?
答案 0 :(得分:1)
您无法在SQL中执行此操作。一个主要原因是将相同数据存储在不同的表中并不是存储数据的SQLish方式。您应该将这些数据存储在一个表中,可能还有一列用于指定其他信息。
您可以做的一件事就是将union all
表格放在一起。像这样:
select t.*
from ((select t.* from A0to5_Table) union all
(select t.* from A5to10_Table)
) t
where a > 0 and a < 5;
您甚至可以为此目的使用视图。
许多数据库使用列作为键来支持表的分区。这为您提供了所需的功能,并将所有数据放在一个表中。您需要查阅特定数据库的文档,以了解它在您的情况下是如何适用的。