Hello, I'm having trouble with the performance of one of my queries and my "sql kung fu" is limited. Any help with this problem would be greatly appreciated
Here's a stripped down version of the tables I'm dealing with: CREATE TABLE A ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT ) CREATE TABLE B ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT ) CREATE TABLE C ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT ) CREATE TABLE JoinAToB ( A_id INTEGER NOT NULL REFERENCES A ( id ), B_id INTEGER NOT NULL REFERENCES B ( id ), UNIQUE( A_id, B_id ) ) CREATE TABLE JoinAToC ( A_id INTEGER NOT NULL REFERENCES A ( id ), C_id INTEGER NOT NULL REFERENCES C ( id ), UNIQUE( A_id, C_id ) ) The following query takes so long I end up killing the app before the query returns: SELECT DISTINCT A.id FROM A, C, B, JoinAToB, JoinAToC WHERE ( ( ( JoinAToB.B_id IN ( 1 ) ) AND ( JoinAToB.B_id = B.id ) AND ( JoinAToB.A_id = A.id ) ) OR ( ( JoinAToC.C_id IN ( 1 ) ) AND ( JoinAToC.C_id = C.id ) AND ( JoinAToC.A_id = A.id ) ) ) ; Table A has approx 13,000 rows Table B has 15 rows Table C has 5 row JoinTableAToB has 11 rows JoinTableAToC has approx 450 rows If I execute either of these queries separately they are very fast: SELECT DISTINCT A.id FROM A, B, JoinAToB WHERE JoinAToB.B_id IN ( 1 ) AND JoinAToB.B_id = B.id AND JoinAToB.A_id = A.id ; SELECT DISTINCT A.id FROM A, C, JoinAToC WHERE JoinAToC.C_id IN ( 1 ) AND JoinAToC.C_id = C.id AND JoinAToC.A_id = A.id ; Adding the OR clause to combine the results seems to be the culprit but I don't know why... Regards, Chad ----------------------------------------------------------------------------- To unsubscribe, send email to [EMAIL PROTECTED] -----------------------------------------------------------------------------