2017-04-07 39 views
0

假设有一个PostgreSQL父表files这是空的;这是'抽象'。然后有从files继承的表包含数据:red-files,green-files,blue-files从PostgreSQL中的两个继承表中选择

我可以从files*中选择,但是我怎样才能从red-filesgreen-files中进行选择?

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

回答

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

+0

看到在原来的问题编辑 - 希望现在我的问题是清晰的。 – jensph

+0

您分别构造每个表的查询,然后应用联合。那么,没有办法一起将单个查询应用于表格?说'文件'有一个列名'大小'。如果我想要一个'where size> 500'应用于所有表格,它仍然需要为每个表格的单个查询编写? – jensph

+0

有没有允许加入两个表的字段? – McNets