Re: Limit of AND, OR in where clause ???

From: Adam Hapworth <hap_at_mikomi.org>
Date: 26 Aug 2002 09:27:01 -0700
Message-ID: <a6cb04db.0208260827.4b20a5ea_at_posting.google.com>


gu_at_interasco.de (Gert Unterhofer) wrote in message news:<6c353a07.0208260123.56bc57ed_at_posting.google.com>...
> When I start this SELECT, ORACLE 8.1.6 doesn´t respond;
> when I minimize the AND/OR Section in the WHERE clausel
> oracle responses correctely.
> What´s the Problem ?
> Gert
>
> SELECT DISTINCT
> B.CHR_TABLE_NAME, B.BLN_ROOT_TABLE FROM TL_ATTR_CLASS_DTABLE_005
> A, TM_DATA_TABLE_005 B
> WHERE
> (((A.FIELD1 = 3) AND (A.FIELD2 = 1)) OR
> ((A.FIELD1 = 12) AND (A.FIELD2 = 1)) OR
> ((A.FIELD1 = 100005) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100006) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100007) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100011) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100013) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100014) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100017) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100027) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100028) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100058) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100060) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100066) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100021) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100061) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100067) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100074) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100077) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100079) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100090) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100092) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100093) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100094) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100095) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100096) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100097) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100129) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100176) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100178) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100179) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100180) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100181) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100182) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100183) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100184) AND (A.FIELD2 = 5)) OR
> ((A.FIELD1 = 100185) AND (A.FIELD2 = 5))) AND
> A.ID_MDA_TABLE = B.ID AND A.ID_CRT_MDA_TABLE = B.ID_CRT
> ORDER BY
> B.BLN_ROOT_TABLE DESC
Why not use an IN clause like so:

SELECT DISTINCT
    B.CHR_TABLE_NAME, B.BLN_ROOT_TABLE FROM TL_ATTR_CLASS_DTABLE_005 A, TM_DATA_TABLE_005 B
 WHERE
 ((A.FIELD1 in (3,12) and (A.FIELD2 = 1)) OR  ((A.FIELD1 in (100005, 100006, 100007 , 100011 , 100013 , 100014 , 100017 , 100027 , 100028 , 100058 , 100060 , 100066 , 100021 , 100061 , 100067 , 100074 , 100077 , 100079 , 100090 , 100092 , 100093 , 100094 , 100095 , 100096 , 100097 , 100129 , 100176 , 100178 , 100179 , 100180 , 100181 , 100182 , 100183 , 100184 , 100185) AND (A.FIELD2 = 5)))) AND
 A.ID_MDA_TABLE = B.ID AND A.ID_CRT_MDA_TABLE = B.ID_CRT  ORDER BY
 B.BLN_ROOT_TABLE DESC Should work the same and looks much cleaner

Adam Received on Mon Aug 26 2002 - 18:27:01 CEST

Original text of this message