X-Original-To: pgsql-general-postgresql.org@localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by svr1.postgresql.org (Postfix) with ESMTP id B51D9DB785 for ; Tue, 1 Nov 2005 22:28:27 -0400 (AST) Received: from svr1.postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 04362-09 for ; Wed, 2 Nov 2005 02:28:23 +0000 (GMT) Received: from smtp.netrox.net (smtp.netrox.net [64.118.231.136]) by svr1.postgresql.org (Postfix) with ESMTP id 45547DB784 for ; Tue, 1 Nov 2005 22:28:19 -0400 (AST) Received: from prod01.jerrysievers.com (adsl-64-118-249-70.netrox.net [64.118.249.70]) by smtp.netrox.net (8.12.8/8.12.8) with ESMTP id jA22SH51005432 for ; Tue, 1 Nov 2005 21:28:18 -0500 Received: (from gsievers@localhost) by prod01.jerrysievers.com (8.11.0/8.11.0) id jA22SMF13540; Tue, 1 Nov 2005 21:28:22 -0500 To: pgsql-general@postgresql.org Subject: Re: A Not Join References: <43677B35.6010005@lani.co.za> From: Jerry Sievers Date: 01 Nov 2005 21:28:22 -0500 In-Reply-To: L van der Walt's message of "Tue, 01 Nov 2005 16:27:01 +0200" Message-ID: Lines: 45 X-Mailer: Gnus v5.7/Emacs 20.7 X-Virus-Scanned: by amavisd-new at hub.org X-Spam-Status: No, score=-0.002 required=5 tests=[AWL=-0.002] X-Spam-Score: -0.002 X-Spam-Level: X-Archive-Number: 200511/65 X-Sequence-Number: 86209 L van der Walt writes: > I have three table: > Users - Contains username, ID etc... > Permissions - A permission name and ID > Link up table - The user.id and permission.id > > If a user.id and a permission.id row exists in the linkuptable the user > have that permission granted. > > With the statement below I can see the permissions a user have. > > SELECT users.username, permissions.name > FROM users INNER JOIN linkuptable > ON (users.id = linkuptable.userid) > INNER JOIN permissions > ON (permissions.id = linkuptable.permissionid) > WHERE users.username = 'DummyUser' > > How do I see the permissions that user DON'T have with a fast SQL statement. > Simple. select permname from permissions where permid not in ( select permid from linkage where userid = 'dummy' ); Or... a slick way to get the anti-permission for the whole bunch of users is to; cross join the userids with permids and then EXCEPT SELECT from linkage table to filter out the active permissions. Have fun! -- ------------------------------------------------------------------------------- Jerry Sievers 305 854-3001 (home) WWW ECommerce Consultant 305 321-1144 (mobile http://www.JerrySievers.com/