Re: Handling large number of OR/IN conditions

From: Steve Atkins <steve(at)blighty(dot)com>
To: pgsql-general List <pgsql-general(at)postgresql(dot)org>
Subject: Re: Handling large number of OR/IN conditions
Date: 2009-05-01 18:36:49
Message-ID: 64F6E022-9D72-4B6C-958D-3CEC041846E6@blighty.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general


On May 1, 2009, at 10:49 AM, David Wall wrote:

> We have a database report function that seemed clean when the number
> of users was small, but as the number of users grow, I was wondering
> if anybody had any good ideas about how to handle OR or IN for
> SELECTs.
>
> The general scenario is that a manager runs reports that list all
> records that were created by users under his/her oversight. So,
> when the number of users is small, we had simple queries like:
>
> SELECT field1, field2 FROM table1 WHERE creator_user_id = 'U1' OR
> creator_user_id = 'U2';
>
> But when there are thousands of users, and a manager has oversight
> of 100 of them, the OR construct seems out of whack when you read
> the query:
>
> WHERE creator_user_id = 'U1' OR creator_user_id = 'U2' ... OR
> creator_user_id = 'U99' OR creator_user_id = 'U100'
>
> I know it can be shortened with IN using something like, but don't
> know if it's any more/less efficient or a concern:
>
> WHERE creator_user_id IN ('U1', 'U2', ...., 'U99', 'U100)
>
> How do people tend to handle this sort of thing? I suspect manager
> reports against their people must be pretty common. Are there any
> good tricks on how to group users like this? Unfortunately, group
> membership changes over time, and users may report to more than one
> manager and thus belong to more than one group, so we can't just
> have a 'creator_group_id' attribute that is set and then query
> against that.

Sounds like a job for a two column table that lists manager and report.

select table1.field1, table2.field2 from table1, reports where
table1.creator_user_id = reports.peon and reports.overlord = 'bob'

Cheers,
Steve

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Chris Spotts 2009-05-01 18:47:54 Re: Handling large number of OR/IN conditions
Previous Message Adrian Klaver 2009-05-01 18:32:00 Re: Online Backups PostGre