[Db] Ottimizzare query

Domenico L. domenico.lorusso a pleiade.it
Ven 19 Gen 2007 17:49:08 CET


Ciao ragazzi, ho una query un po' particolare.

- La struttura (è così e me la devo tenere) prevede che ci siano dei 
giochi ad ogni gioco è assegnato un idGioco.
- Ad ogni gioco partecipa una squadra (idSquadra)
- Ogni squadra è composta da 1 a n giocatori (idPartecipante), e da 
qualche spettatore che però non ha diritto a fare nulla (posizione=membro).
- Per ogni gioco vengono fatte delle richieste (idRichiesta) cui deve 
rispondere la squadra nel suo insieme (inviocongiusto='si'), nella 
figura del capo, oppure singolarmente ogni partecipante 
(inviocongiusto='si')
- Ad ogni richiesta deve corrispondere una risposta, per ogni 
partecipante (se inviocongiunto=no) o solo per il capogruppo (se 
inviocongiunto=si)

Allora questa query dovrebbe estrarmi tutte le richieste con le 
corrispondenti risposte e, se questa non c'è, avrò un idRisposte a null


    select     [elenco campi]
    from    (
        richieste r inner join partecipanti t
            on (r.idGioco=t.idGioco)
        ) left join risposte s
            on ( r.idrichieste = s.idrichieste
                and t.idPartecipante = s.idPartecipante
                and s.completo >= '0'
                and t.squadra=s.t.squadra
        )
    where    
        t.squadra = 30      
        and r.idGioco = 108
        and (t.capogruppo=1 or (r.inviocongiunto='no' and 
t.posizione='membro' )  )
        and [condizioni filtro richiesta]


Ho fatto un po' di test e sembra funzionare, ma quello su cui mi 
interrogo è se non sarebbe più opportuno (e possibile) spostare
        and (t.capogruppo=1 or (r.inviocongiunto='no' and 
t.posizione='membro' )  )

all'interno del join:


left join risposte s
            on ( r.idrichieste = s.idrichieste
                and t.idPartecipante = s.idPartecipante
                and s.completo >= '0'
                and t.squadra=s.t.squadra
                and (t.capogruppo=1 or (r.inviocongiunto='no' and 
t.posizione='membro' )  )
        )



Cosa ne pensate?
Ciao!

-- 
Domenico L.                             icq: 645 44 861

per stupire mezz'ora basta un libro di storia,
io cercai di imparare la Treccani a memoria... [F.d.A.]



Maggiori informazioni sulla lista Db