从三个不同的表中插入
insert into from three different tables
我正在尝试将来自三个不同 table 的数据插入一个 table 中。
我怎样才能用一个命令而不是三个 'insert into' 命令来完成?
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));`
如果表中各列的数据类型相同,则可以使用以下方式
drop table t if exists;
create table t(id int);
insert into t(select 2 union all select 3 union all select 5);
所以你的插入语句应该是
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))
)
我正在尝试将来自三个不同 table 的数据插入一个 table 中。 我怎样才能用一个命令而不是三个 'insert into' 命令来完成?
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));`
如果表中各列的数据类型相同,则可以使用以下方式
drop table t if exists;
create table t(id int);
insert into t(select 2 union all select 3 union all select 5);
所以你的插入语句应该是
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))
)