Postgres |如何将两个或多个表组合成单个表

时间:2018-04-09 04:59:14

标签: sql postgresql postgis postgresql-9.3 postgresql-9.4

我有很多数据被分成两个或多个表。然后如何从所有表中获取数据。

第一个表是点表,它分为三个部分

first table = ab_p1_point
second table = ab_p2_point
third table = ab_p3_point

另一个表是行表,它又分为三个部分

first table = bc_p1_line
second table = bc_p2_line
third table = bc_p3_line

如何将点表的所有部分组合成单点表,将线表的所有部分组合成单行表,而不是在两个表之间执行操作。

2 个答案:

答案 0 :(得分:0)

假设所有三个表都具有相同的结构,您可以使用union all

select * from (
    select f1, f2, f3 from ab_p1_point
    union all
    select f1, f2, f3 from ab_p2_point
    union all
    select f1, f2, f3 from ab_p3_point
) t
where f1 = 'abc'

通过将查询放入视图,您可以更轻松地使用它。

但是为什么要在多个表中划分你的行?

答案 1 :(得分:0)

您可以使用CTE(WITH声明):

WITH points AS (
    SELECT * FROM ab_p1_point
    UNION
    SELECT * FROM ab_p2_point
    UNION
    SELECT * FROM ab_p3_point
    )
,  lines AS (
    SELECT * FROM bc_p1_line
    UNION
    SELECT * FROM bc_p2_line
    UNION
    SELECT * FROM bc_p3_line
    )
SELECT * 
FROM points
INNER JOIN lines 
ON points.column = lines.column