将查询与具有相同列的多个表组合到一个查询中

时间:2017-12-05 11:46:15

标签: postgresql grails

我有6张桌子。所有这些都可以拥有数百万行数据。所有表都有object_id,changer_id,date_created列。

我需要对所有表格进行查询

SELECT object_id
FROM table#
WHERE changer_id=someId
AND date_created > dateA
AND dateCreated < dateB

或其等值的grails

table#.createQuery().list{
        projections{property('object_id')}
        eq('changer_id', someId)
        ge('dateCreated' dateA)
        le('dateCreated', dateB)
}

将对所有6个表进行相同的查询,然后合并结果并删除所有重复项。

我之间没有使用,因为dateB可能并不总是存在,所以它会被忽略。

有没有办法将这个查询组合成6个表或任何其他方式的单个查询,使其比6个单独的查询更快?

1 个答案:

答案 0 :(得分:0)

SQL继承:

假设您的表格为table1table2等,

设置:执行一次:

create table combined ( like table1 );

alter table table1 inherits combined;
alter table table2 inherits combined;
alter table table3 inherits combined;
alter table table4 inherits combined;
alter table table5 inherits combined;
alter table table6 inherits combined;

查询,根据需要多次执行此操作:

SELECT object_id
FROM combined
WHERE changer_id=someId
AND date_created > dateA
AND dateCreated < dateB

postgresql将在内部生成所需的联合。

我假设所有表都具有相同的列,如果不排除在创建组合表时某些表中缺少的任何列。 (您不必使用like ...,您可以使用更常见的列表列表语法)