[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