Thread: Column names for INSERT with query

Column names for INSERT with query

From
Robert James
Date:
I would like to:

INSERT INTO t
SELECT * FROM r, (x + y) AS field3

How do I correlate the names of the fields? That is, how do I indicate
which fields from r or field3 should be inserted into the right
columns in t?


Re: Column names for INSERT with query

From
bricklen
Date:
On Thu, Aug 22, 2013 at 3:30 PM, Robert James <srobertjames@gmail.com> wrote:
I would like to:

INSERT INTO t
SELECT * FROM r, (x + y) AS field3

INSERT INTO t (col1, col2, col3)
SELECT ...

Re: Column names for INSERT with query

From
Ian Lawrence Barwick
Date:
2013/8/23 Robert James <srobertjames@gmail.com>:
> I would like to:
>
> INSERT INTO t
> SELECT * FROM r, (x + y) AS field3
>
> How do I correlate the names of the fields? That is, how do I indicate
> which fields from r or field3 should be inserted into the right
> columns in t?

INSERT INTO t (t_field1, t_field2, t_field3)
  SELECT r.field1, r.field2, (x+y)
    FROM r


Re: Column names for INSERT with query

From
BladeOfLight16
Date:
On Thu, Aug 22, 2013 at 6:36 PM, Ian Lawrence Barwick <barwick@gmail.com> wrote:
INSERT INTO t (t_field1, t_field2, t_field3)
  SELECT r.field1, r.field2, (x+y)
    FROM r

Obligatory link to documentation: http://www.postgresql.org/docs/9.2/static/sql-insert.html. See where it says [ ( column_name [, ...] ) ]? The square brackets mean "optional", and the ",..." means repeat as needed. The fact "column_name" is italics tell you it's some kind of variable text you should replace, and later on in the page explains what goes there. So it's telling you that you can use a comma separated list of column names from the destination table. PostgreSQL has some of the best documentation of any software I've ever seen. Don't hesitate to check it often when working.

Re: Column names for INSERT with query

From
David Johnston
Date:
Robert James wrote
> I would like to:
>
> INSERT INTO t
> SELECT * FROM r, (x + y) AS field3
>
> How do I correlate the names of the fields? That is, how do I indicate
> which fields from r or field3 should be inserted into the right
> columns in t?

Already answered but I'll add that as written, assuming there are enough
columns present, the syntax shown will work and do a pair-wise matching of
columns in the order defined in the catalog for table "t".  You can view
that order by simply issuing a "SELECT * FROM t".  If you know the order of
"t" you can simply explode the "SELECT * FROM r, (x+y)" into an explicit
column-list that has the same ordering as "t".  There are limitations,
mainly as relates to default values, but for a table "t" with a large number
of columns it can be considerably less verbose/tedious to write.

David J.




--
View this message in context:
http://postgresql.1045698.n5.nabble.com/Column-names-for-INSERT-with-query-tp5768334p5768388.html
Sent from the PostgreSQL - general mailing list archive at Nabble.com.