X-Original-To: pgsql-sql-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id 8BCEF9DC890 for ; Wed, 18 Jan 2006 01:04:23 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 36005-03 for ; Wed, 18 Jan 2006 01:04:22 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey- Received: from smtp-send.myrealbox.com (smtp-send.myrealbox.com [151.155.5.143]) by postgresql.org (Postfix) with ESMTP id 651D59DC883 for ; Wed, 18 Jan 2006 01:04:21 -0400 (AST) Received: from [172.16.1.181] grzm [61.197.227.146] by smtp-send.myrealbox.com with NetMail SMTP Agent $Revision: 1.6 $ on Linux; Tue, 17 Jan 2006 22:04:19 -0700 In-Reply-To: <3578f52e0601172043s64561353i689350a1c5d4debb@mail.gmail.com> References: <3578f52e0601172043s64561353i689350a1c5d4debb@mail.gmail.com> Mime-Version: 1.0 (Apple Message framework v746.2) Content-Type: text/plain; charset=US-ASCII; delsp=yes; format=flowed Message-Id: Cc: pgsql-sql@postgresql.org Content-Transfer-Encoding: 7bit From: Michael Glaesemann Subject: Re: Matching several rows Date: Wed, 18 Jan 2006 14:04:16 +0900 To: Ivan Steganov X-Mailer: Apple Mail (2.746.2) X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=0.372 required=5 tests=[AWL=0.372] X-Spam-Score: 0.372 X-Spam-Level: X-Archive-Number: 200601/110 X-Sequence-Number: 23899 On Jan 18, 2006, at 13:43 , Ivan Steganov wrote: > A table URIGHTS which stores an ID and the RIGHTs this ID has. One > ID may have many rights and accordingly records in table, sample: > Now I need to find out which IDs have, say rights 2 AND 5 AND 10. select "ID" from "URIGHTS" as right_2 join "URIGHTS" as right_5 using ("ID") join "URIGHTS" as right_10 using ("ID") where right_2."RIGHT" = 2 and right_5."RIGHT" = 5 and right_10."RIGHT" = 10 or select "ID" from ( select "ID" from "URIGHTS" where "RIGHT" = 2 ) as right_2 join ( select "ID" from "URIGHTS" where "RIGHT" = 5 ) as right_5 using ("ID") join ( select "ID" from "URIGHTS" where "RIGHT" = 10 ) as right_10 using ("ID") Simple is in the eye of the beholder. You might want to compare the EXPLAIN ANALYZE output to see if there are any significant differences between these queries. Michael Glaesemann grzm myrealbox com