从三个不同的表中插入

时间:2016-01-06 10:49:05

标签: sql postgresql psql

我正在尝试从三个不同的表中将数据插入一个表中。 我如何在一个命令中完成,而不是在三个命令中插入'命令?

drop table osm_street;
CREATE TABLE osm_street 
( 
Postleitzahl text,
Ort text,
Strasse  text,
Hausnummer text
);
insert into osm_street (Postleitzahl, Ort, Strasse, Hausnummer)
select "addr:postcode","addr:city","addr:street", "addr:housenumber"
from planet_osm_polygon;

    insert into osm_street (Postleitzahl, Ort, Strasse, Hausnummer)
    select "addr:postcode","addr:city","addr:street", "addr:housenumber"
    from planet_osm_point;

    insert into osm_street (Postleitzahl, Ort, Strasse)
    select plz99,"addr:city",line.name
    from planet_osm_line as line , post_pl
    where ST_Intersects(ST_SetSRID(post_pl.geom, 4326), `ST_Transform(way,4326));`

1 个答案:

答案 0 :(得分:1)

如果表中每列的数据类型相同,则可以使用以下方式

drop table t if exists;
create table t(id int);
insert into t(select 2 union all select 3 union all select 5);

DEMO

所以你的插入语句应该是

  INSERT INTO osm_street (
        SELECT "addr:postcode"
        ,"addr:city"
        ,"addr:street"
        ,"addr:housenumber" FROM planet_osm_point

    UNION ALL

        SELECT "addr:postcode"
        ,"addr:city"
        ,"addr:street"
        ,"addr:housenumber" FROM planet_osm_polygon

    UNION ALL

        SELECT plz99
        ,"addr:city"
        ,line.NAME,'' FROM planet_osm_line AS line
        ,post_pl WHERE ST_Intersects(ST_SetSRID(post_pl.geom, 4326), `ST_Transform(way, 4326))
        )