从PostgreSQL中的两个继承表中选择

时间:2017-04-07 19:04:37

标签: postgresql select single-table-inheritance

假设有一个空的PostgreSQL父表files;它的抽象'。然后有一些表继承自files,其中包含数据:red-filesgreen-filesblue-files

我可以从files*中选择,从全部三个中进行选择,但我如何才能从red-filesgreen-files中进行选择?

也就是说,如果查询将从red-files检索3行,从green-files检索2行,则我查找的组合查询将显示5行。

1 个答案:

答案 0 :(得分:1)

除非有字段加入,否则您可以使用UNION ALL。

CREATE TABLE files (
    name            text,
    size            int
);

CREATE TABLE redfiles (
    id           char(2)
) INHERITS (files);


CREATE TABLE bluefiles (
    id           char(2)
) INHERITS (files);
insert into redfiles (name, id, size) values ('file1','aa', 1024);
insert into redfiles (name, id, size) values ('file2','bb', 2048);
insert into bluefiles (name, id, size) values ('file3','xx', 1024);
insert into bluefiles (name, id, size) values ('file4','yy', 1526);
select * from files;
name  | size
:---- | ---:
file1 | 1024
file2 | 2048
file3 | 1024
file4 | 1526
with MyFiles as
(
    select * from redfiles
    union all
    select * from bluefiles
) 
select *
from   MyFiles
where  size = 1024;
name  | size | id
:---- | ---: | :-
file1 | 1024 | aa
file3 | 1024 | xx

dbfiddle here