On Sun, Aug 08, 2010 at 12:33:40PM -0700, David Fetter wrote: > On Sun, Aug 08, 2010 at 01:55:19AM -0700, John R Pierce wrote: > > >The condition > > > > > > and table.item = 'laptop' and table.item = 'Desktop' > > > > > >says: I want all rows where the column item has the value > > >'Laptop' and *at the same time* has the value 'Desktop' Which > > >clearly cannot be the case (a column can only have a single > > >value) > > > > > >So you need to join all "Laptop" rows to all "Desktop" rows to > > >get what you want. > > > > why not use OR ? > > > > ... AND (table.item = 'laptop' OR table.item='Desktop') ... > > OR doesn't account for duplicates. Two laptops on the same date > would cause a false positive. Thinking this over a little more, it's probably fastest to combine the approaches, i.e. use both a WHERE clause and a HAVING clause. For example: SELECT TID, "Date" FROM "table" WHERE item = ANY(ARRAY['Desktop','Laptop']) GROUP BY TID, "Date" HAVING ARRAY['Desktop','Laptop'] <@ array_agg(item); Cheers, David -- David Fetter <david@xxxxxxxxxx> http://fetter.org/ Phone: +1 415 235 3778 AIM: dfetter666 Yahoo!: dfetter Skype: davidfetter XMPP: david.fetter@xxxxxxxxx iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics Remember to vote! Consider donating to Postgres: http://www.postgresql.org/about/donate -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general