I have, to make it clear, 2 many-to-many relationships for table person:

Person            Person_Club         Club                    Person_Creditcard        
CreditCard
--------------        -------------------         ---------------------     
---------------------               ---------------------
person_id        person_id              club_id                person_id               
     credit_id
first_name       club_id                  name                  credit_id              
        company_name
last_name       role_id                   additional_info     additional_info          
    additional_info
middle_ini       additional_info        ===========    ===========             
============
gender            ===========
========

to find people with specified club access and credit access, i have to compose sql 
involving all
tables here. Here 'additional_info' stands for possibly multiple additional columns.

Suppose tables person and person_creditcard have large number of rows, and each club 
has
a lot less members than any creditcard company does. What my sql should look like?

I'm looking at this:

select t0.* from person t0 where (...some conditions within table person...) and 
t0.person_id in
(select t1.person_id from person_creaditcard t1, creditcard t2 
where (...some conditoons about t1 and t2) and t1.person_id in
(select t3.person_id from person_club t3, club t4 where (...some conditions within t3, 
t4) ) ) );

I'm hoping in this way, mysql gets smallest possible person_id set from sub query 
about person_club and club,
and then use this to speet up the search on tables person_creditcard and creditcard 
and finaly speed up the
person table search.

Any inputs? Thanks a lot


Reply via email to