Received: from localhost (unknown [200.46.204.183]) by developer.postgresql.org (Postfix) with ESMTP id 69FF12E0134 for ; Wed, 16 Apr 2008 15:44:59 -0300 (ADT) Received: from developer.postgresql.org ([200.46.204.71]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 28684-01-10 for ; Wed, 16 Apr 2008 15:44:56 -0300 (ADT) X-Greylist: domain auto-whitelisted by SQLgrey-1.7.5 Received: from wf-out-1314.google.com (wf-out-1314.google.com [209.85.200.175]) by developer.postgresql.org (Postfix) with ESMTP id 008182E0156 for ; Wed, 16 Apr 2008 15:34:44 -0300 (ADT) Received: by wf-out-1314.google.com with SMTP id 28so2499058wff.28 for ; Wed, 16 Apr 2008 11:34:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; bh=/dUGshSSR9Dy+kv3uunAssa9cmNuVEuuzPhhNKJQHT4=; b=QL2lGHx9vvkSi0I5Nadnv/T5aJXWzxvQw7loHobxz5ImDVSzMIH80PWcfsgSC08u172/W74jqID7bT/EYFhLqURfPKhyHsSwieDkYtAJWdsbmZNIdWI4nONAlc7pHIWxrIk1i8hZVoVfDs+Fz5ZGKWsjUtGJVZ3kc+9+qUKKZlY= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:mime-version:content-type:content-transfer-encoding:content-disposition; b=V9onHap1QTR0K+7HlW8kI6AWgA8pY5X6wMtrNdJLm8QXUULe3hg1+3Z7UwuA9ThDjTGrpA2zmnXqV2k/qUC/0Zbb2itVPWQs+gfwjlq9TZ9aZzflUgM94x/As6P2FhR6ud+nX8vlhRqxkdUIGX8kyfabITYWRInOIcMWlrTbXTQ= Received: by 10.142.203.13 with SMTP id a13mr93174wfg.154.1208370883293; Wed, 16 Apr 2008 11:34:43 -0700 (PDT) Received: by 10.142.161.6 with HTTP; Wed, 16 Apr 2008 11:34:43 -0700 (PDT) Message-ID: <275890790804161134k2921148dy60206d890a047d46@mail.gmail.com> Date: Wed, 16 Apr 2008 20:34:43 +0200 From: "Mina R Waheeb" To: pgsql-sql@postgresql.org Subject: SQL/XML Multi table join question MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200804/99 X-Sequence-Number: 30638 Hi all, I have the following tables (parent and two children) CREATE SEQUENCE person_seq; CREATE TABLE person( _id integer DEFAULT nextval('person_seq') NOT NULL, _timestamp TIMESTAMP NOT NULL, _lastModified TIMESTAMP NOT NULL, name VARCHAR(255) NOT NULL, age INTEGER DEFAULT NULL, PRIMARY KEY (_id) ); CREATE TABLE person_nationality( _id serial NOT NULL, _parent INTEGER NOT NULL, nationality VARCHAR(255) NOT NULL, FOREIGN KEY (_parent) REFERENCES person (_id) ON DELETE CASCADE, PRIMARY KEY (_id) ); CREATE TABLE person_variables( _id serial NOT NULL, _parent INTEGER NOT NULL, variable VARCHAR(255) DEFAULT NULL, value VARCHAR(255) DEFAULT NULL, FOREIGN KEY (_parent) REFERENCES person (_id) ON DELETE CASCADE, PRIMARY KEY (_id) ); I'm trying to generate XML element for each person which also contains the person nationality and variables in one result set SELECT XMLROOT ( XMLELEMENT ( NAME information, XMLATTRIBUTES ( person._id AS pid ), XMLAGG( XMLELEMENT( name "nationality", person_nationality.nationality ) ), XMLAGG( XMLELEMENT( name "value", person_variables.value ) ) ), VERSION '1.0', STANDALONE YES ) FROM person INNER JOIN person_nationality ON person_nationality._parent = person._id INNER JOIN person_variables ON person_variables._parent = person._id GROUP BY person._id LIMIT 100 OFFSET 10000; The above query return number of variables * nationality for each person which is expected (for me) because of the join logic. Also i can't use DISTINCT keyword in XMLAGG function. Any idea how to do this? or is there is any aggregate function returns array from row set, i didn't find any in the documenation. Thanks in advance Mina.