| From: | Darren Ferguson <darren(at)crystalballinc(dot)com> | 
|---|---|
| To: | Jean-Christian Imbeault <jc(at)mega-bucks(dot)co(dot)jp> | 
| Cc: | pgsql-general <pgsql-general(at)postgresql(dot)org> | 
| Subject: | Re: IN vs EXIIST | 
| Date: | 2002-09-19 02:59:46 | 
| Message-ID: | Pine.LNX.4.44.0209182257100.2729-100000@thread.crystalballinc.com | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-general | 
On Thu, 19 Sep 2002, Jean-Christian Imbeault wrote:
> I find myself writing a lot of queries with this pattern:
> 
> select distinct key1 from A where id not it
>    (select distinct key1 from A where x='false');
> 
> The reason being that key1 is not a primary key (key1, key2 is the 
> primary key). i.e. I have a table like this
> 
> key1	key2	x
> ------------------
> a	1	t
> a	2	t
> a	3	f
> b	1	t
> b	2	t
> b	3	t
> c	3	t
> c	4	f
> 
> So basically I want key1 values for which all the X's are true.
Why areyou using the sub select. If you just want all the key1 where x is 
true then the following will work
SELECT DISTINCT(key1) FROM a WHERE x = TRUE;
If you want all rows and don't care about duplicates then remove the 
distinct.
Hope this helps
> 
> I've seen many posts saying that using IN is not optimal and replacing 
> it with EXISTS is much better. I've read the only docs but I can't 
> understand the difference between the two or how to convert.
> 
> Can someone point me to some other docs or explain to me how to convert? 
> Or is my table schema wrong?
> 
> Thanks!
> 
> Jc
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo(at)postgresql(dot)org)
> 
-- 
Darren Ferguson
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Eric D Nielsen | 2002-09-19 03:00:39 | Re: Permissions with multiple groups... | 
| Previous Message | Rob Hutton | 2002-09-19 02:47:24 | Aliasing all fields |