X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (unknown [64.117.224.130]) by svr1.postgresql.org (Postfix) with ESMTP id 0C9D9D1B4E2 for ; Thu, 9 Oct 2003 13:40:11 +0000 (GMT) Received: from svr1.postgresql.org ([64.117.224.193]) by localhost (neptune.hub.org [64.117.224.130]) (amavisd-new, port 10024) with ESMTP id 23769-10 for ; Thu, 9 Oct 2003 10:39:27 -0300 (ADT) Received: from main.gmane.org (main.gmane.org [80.91.224.249]) by svr1.postgresql.org (Postfix) with ESMTP id 8A0B5D1B545 for ; Thu, 9 Oct 2003 10:39:16 -0300 (ADT) Received: from list by main.gmane.org with local (Exim 3.35 #1 (Debian)) id 1A7b0a-00089n-00 for ; Thu, 09 Oct 2003 15:39:12 +0200 X-Injected-Via-Gmane: http://gmane.org/ To: pgsql-sql@postgresql.org Received: from sea.gmane.org ([80.91.224.252]) by main.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1A7b0Z-00089f-00 for ; Thu, 09 Oct 2003 15:39:11 +0200 Received: from news by sea.gmane.org with local (Exim 3.35 #1 (Debian)) id 1A7b0Z-0001wc-00 for ; Thu, 09 Oct 2003 15:39:11 +0200 From: Harald Fuchs Subject: Re: Selecting rows as if they were columns? Date: 09 Oct 2003 15:40:03 +0200 Organization: Linux Private Site Lines: 63 Message-ID: References: <3F855F38.9070803@hotdogrecords.com> Reply-To: hf99@protecting.net Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII X-Complaints-To: usenet@sea.gmane.org X-No-Archive: yes User-Agent: Gnus/5.0808 (Gnus v5.8.8) Emacs/20.7 X-Virus-Scanned: by amavisd-new at postgresql.org X-Archive-Number: 200310/102 X-Sequence-Number: 15502 In article <3F855F38.9070803@hotdogrecords.com>, Kurt Overberg writes: > Gang, > I've got what I think should be a pretty simple problem- I just can't > figure out how I'd do it. Heck, I can't even figure out how I'd > search for an answer to this problem. > I've got 2 tables: member and member_attr > Member is just a standard entry for a member. Very simple: > table member { > id integer, > name character varying(30) > } > Member_attr is just a table of name/value pairs, such as: > table memberextra { > memberid integer, > param1 character varying(512), > param2 character varying(512), > } > where param1 is the name, param2 is the value. > Right now, I can: > select member.id, member.name, member_attr.param1, member_attr.param2 > from member, member_attr where member.id = member_attr.memberid; > ...this gives me n rows per member where n = # of attributes for that > member, like this: > id | name | param1 | param2 > ======================================= > 1 | dave | home | /home/dave > 1 | dave | testing | 1 > 2 | john | home | /home/john > ...is there some way to make this return like this: > id | name | home | testing > ====================================== > 1 | dave | /home/dave | 1 > 2 | john | /home/john | > ...where it sort of "expands" the rows out into columns? Am I just > going about this the wrong way? Thoughts on the subject would be > greatly appreciated. This should work fine as long as you know all possible values of param1 in advance: SELECT m.id, m.name, m1.param2, m2.param2 FROM member m LEFT JOIN memberextra m1 ON m1.memberid = m.id AND m1.param1 = 'home' LEFT JOIN memberextra m2 ON m2.memberid = m.id AND m2.param1 = 'testing'