Received: from localhost (unknown [200.46.208.211]) by mail.postgresql.org (Postfix) with ESMTP id EA83C633E2C for ; Fri, 2 Oct 2009 02:46:04 -0300 (ADT) Received: from mail.postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.208.211]) (amavisd-maia, port 10024) with ESMTP id 37302-10 for ; Fri, 2 Oct 2009 05:45:52 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from moutng.kundenserver.de (moutng.kundenserver.de [212.227.126.177]) by mail.postgresql.org (Postfix) with ESMTP id 1BF44633547 for ; Fri, 2 Oct 2009 02:45:54 -0300 (ADT) Received: from webserv.wug.de ([194.25.154.138]) by mrelayeu.kundenserver.de (node=mreu2) with ESMTP (Nemesis) id 0LZjNw-1MUCqA0tmm-00ljWy; Fri, 02 Oct 2009 07:45:52 +0200 Received: from kretschmer by webserv.wug.de with local (Exim 3.36 #1) id 1Mtaxh-0006h4-00 for pgsql-sql@postgresql.org; Fri, 02 Oct 2009 07:45:49 +0200 Date: Fri, 2 Oct 2009 07:45:49 +0200 From: "A. Kretschmer" To: pgsql-sql@postgresql.org Subject: Re: right join problem Message-ID: <20091002054548.GB22496@a-kretschmer.de> References: Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-OS: Debian/GNU Linux - weil ich es mir Wert bin! User-Agent: Mutt/1.5.9i X-Provags-ID: V01U2FsdGVkX1+gT3nG19JPG2Dypbn0SCjMezuP75u3cBMXoXe zL2w3eIt2i/tGWAEFVdRA4twPvu8hTEZau3QWOSKstCadiHHyo 7Q+mrJuFR7CJap9NPDoqw== X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=-1.576 tagged_above=-10 required=5 tests=AWL=-0.466, BAYES_05=-1.11 X-Spam-Level: X-Archive-Number: 200910/11 X-Sequence-Number: 33210 In response to Greenhorn : > Hi, > > I'm trying to retrieve all meter_id from table meter, and for meter_id > without amount, I'd like it to show nothing, 'null'. I've used right > join here but it's not giving me my desired result. Is there another > way to do this? Here's the query I'm trying. > > Thanks in advance! > > select m.meter_id, mp.meter_id, sum(amount_in_cents) as am > from meter m > right join transaction_mpark mp on (m.meter_id = mp.meter_id) > where date_time between '2009-09-28 00:00:00' and '2009-10-04 23:59:59' > group by m.meter_id, mp.meter_id > order by m.meter_id Use a left join instead? test=*# select * from master; id | name ----+---------- 1 | master 1 2 | master 2 (2 rows) test=*# select * from slave; id | value ----+------- 1 | 1 1 | 2 1 | 3 (3 rows) test=*# select m.id, s.id, sum(s.value) from master m right join slave s on (m.id=s.id) group by m.id, s.id; id | id | sum ----+----+----- 1 | 1 | 6 (1 row) test=*# select m.id, s.id, sum(s.value) from master m left join slave s on (m.id=s.id) group by m.id, s.id; id | id | sum ----+----+----- 1 | 1 | 6 2 | | (2 rows) Andreas -- Andreas Kretschmer Kontakt: Heynitz: 035242/47150, D1: 0160/7141639 (mehr: -> Header)