Ho 3 tab in PostgreSQL 7.4.8: anagrafica(..., id_anagrafica,id_attivita,...), anagrafica_dipiu(...,id_anagrafica,data_isc,...), attivita(..., id_attivita,...).
Relazioni:
1) anagrafica - anagrafica_dipiu relazione 1 a molti tramite id_anagrafica (nella prima chiave primaria, nella seconda esterna, quindi si può ripetere);
2) anagrafica - attivita tramite id_attivita relazione molti a 1 (nella seconda chiave primaria)
3) anagrafica_dipiu e attivita non sono collegate.

L'interrogazione è questa:
selezionare i campi di anagrafica, alcuni campi di anagrafica_dipiu in un range di data (che è contenuta in anagrafica_dipiu ) e con un certo id_attivita.
La query che ho costruito è la seguente:
SELECT * from anagrafica inner join
(SELECT anagrafica_dipiu.* FROM anagrafica_dipiu INNER JOIN
(select distinct anagrafica_dipiu.id_anagrafica from anagrafica_dipiu WHERE data_isc BETWEEN '$data_inizio' AND '$data_fine') as T1 ON T1.id_anagrafica = anagrafica_dipiu.id_anagrafica
) as T2
ON T2.id_anagrafica = anagrafica.id_anagrafica
INNER JOIN attivita
ON anagrafica.id_attivita = attivita.id_attivita
Il problema è che non è proprio perfetta: se c'è un id_anagrafica che compare 2 volte in anagrafica_dipiu mi viene ripetuto il record 2 volte.
Come faccio a risolvere il problema? E' possibile migliorare/semplificare la query?!?!!??!?!!?

Ringrazio fin d'ora chi mi potrà essere d'aiuto!