Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id 4E9432E30AD for ; Mon, 14 Jan 2008 14:38:43 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 46611-01 for ; Mon, 14 Jan 2008 14:38:40 -0400 (AST) Received: from mail.planetcobalt.net (mail.planetcobalt.net [217.10.9.49]) by postgresql.org (Postfix) with ESMTP id 5F63A2E3004 for ; Mon, 14 Jan 2008 14:38:40 -0400 (AST) Received: by mail.planetcobalt.net (Postfix, from userid 1000) id 511BC3C00084; Mon, 14 Jan 2008 19:38:38 +0100 (CET) Date: Mon, 14 Jan 2008 19:38:38 +0100 From: Ansgar -59cobalt- Wiechers To: pgsql-performance@postgresql.org Subject: Re: Saving result set of SELECT to table column Message-ID: <20080114183838.GC9522@mail.planetcobalt.net> References: <478BA7B8.2090907@p-dw.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <478BA7B8.2090907@p-dw.com> User-Agent: Mutt/1.5.13 (2006-08-11) X-Virus-Scanned: Maia Mailguard 1.0.1 X-Archive-Number: 200801/120 X-Sequence-Number: 28359 On 2008-01-14 Patric wrote: > Well I've a normalized database.. > For instance: > > create table Y ( pk, data... ); > create table Z ( pk , data... ); > > create table X ( char, references Y, references Z); > > SELECT * from X; > > Now I want to make a listing of the result set from X. > If there are references to Z or Y (not null refs), I want to display > that data too. > > Normally I would SELECT, to get that data, not in my case. > Nearly all queries will be SELECTs, no UPDATEs or INSERTs, so need to > optimize that case. > > The dirty little denormalization would look like this: > > create table X ( char, ref. to Y, ref. to Z, StoreY Y , StoreZ Z); > > On insert or update of Z or Y, I would update these two (StoreY, > StoreZ) columns by RULE or TRIGGER.. > I know this is not nice etc.. Codd would sue for this, but in my case > performance over beauty is ok. > I'm looking for something like UPDATE X set StoreY=(SELECT * FROM Y > WHERE pk=4) WHERE foreignID2Y = 4; > > Is there a away to accomplish this straightforward in a single > statement without doing loops and stuff in a serverside procedure? Looks to me like you want to (LEFT|RIGHT) OUTER JOIN the tables. Regards Ansgar Wiechers -- "The Mac OS X kernel should never panic because, when it does, it seriously inconveniences the user." --http://developer.apple.com/technotes/tn2004/tn2118.html