pg.ddx.io  pgsql-sql@postgresql.org mailing list archive  
help / color / mirror / Atom feed
From: Marty Scholes <marty@outputservices.com>
To: pgsql-sql <pgsql-sql@postgresql.org>
Subject: Re: Inserting data in a table using sub-selects]
Date: Wed, 10 Mar 2004 13:56:46 -0700
Message-ID: <404F810E.1010707@outputservices.com> (raw)

INSERT INTO table2 (id, content) (
    SELECT id, coalesce(title, '') || ' ' || coalesce(description, '')
    FROM table1 t1);

If you want to keep them syncrhonized, in other words, rerun the query
over and over again without having to truncate table2 first or deleting
all of the rows, you can:

INSERT INTO table2 (id, content) (
    SELECT id, coalesce(title, '') || ' ' || coalesce(description, '')
    FROM table1 t1)
WHERE id NOT IN (
    SELECT id
    FROM table1);

With Oracle there is a slick way to do a partial outer join that allowed
you to do this without creating a complete list of table1.id in the last
subquery, but I dunno if Pg has an equivalent mechanism.



Andreas Joseph Krogh wrote:
 > -----BEGIN PGP SIGNED MESSAGE-----
 > Hash: SHA1
 >
 > Hi, I'd like to fill one table with the contents of another table. 
Mye schema
 > is like this:
 >
 > CREATE TABLE table1(
 > id serial NOT NULL PRIMARY KEY,
 > title varchar NOT NULL,
 > description varchar
 > );
 >
 > CREATE TABLE table2(
 > id int NOT NULL REFERENCES(table1(id) ON DELETE CASCADE,
 > content varchar NOT NULL
 > );
 >
 > Now - is there a way I can do something like:
 > INSERT INTO table2(id, content) values (select t1.id, 
coalesce(t1.title, '')
 > || ' ' || coalesce(t1.description, '') as content from table1 t1);
 >
 > Any hints on how to insert a lot of values at the same time like this?
 >
 > - --
 > Andreas Joseph Krogh <andreak@officenet.no>
 > Managing Director, Senior Software Developer
 > OfficeNet AS
 >
 > I always do a CVS update before making a patch (unless I forget).
 >
 > gpg public_key: http://dev.officenet.no/~andreak/public_key.asc
 > -----BEGIN PGP SIGNATURE-----
 > Version: GnuPG v1.2.2 (GNU/Linux)
 >
 > iD8DBQFAT3H1UopImDh2gfQRAsa6AJ9jZjNz25w4iVnxNJYY9LJuG0HBLACfZfup
 > 1TMzQSi1+YYgNjpcampX6wo=
 > =fJA3
 > -----END PGP SIGNATURE-----
 >
 > ---------------------------(end of broadcast)---------------------------
 > TIP 7: don't forget to increase your free space map settings




view thread (4+ messages)  latest in thread

Message-ID: <404F810E.1010707@outputservices.com>
Permalink:  ../404F810E.1010707@outputservices.com/
Also on:    postgresql.org/message-id/404F810E.1010707@outputservices.com

 · 

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: pgsql-sql@postgresql.org
  Cc: marty@outputservices.com
  Subject: Re: Inserting data in a table using sub-selects]
  In-Reply-To: <404F810E.1010707@outputservices.com>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox