Eccomi di nuovo...
Si è aggiunta la necessita di reperire ulteriori informazioni da un'altra tabella
quindi, al tuo codice:
SELECT acq.nominativo, ven.nominativo
FROM compravendite c
JOIN persone acq
ON c.id1 = acq.id
JOIN persone ven
ON c.id2 = ven.id
ho aggiunto agente.nominativo nella select e un'altra LEFT JOIN agenti ON c.id3 = agenti.id
ottenendo, quindi:
SELECT acq.nominativo, ven.nominativo,agente.nominativo
FROM compravendite c
JOIN persone acq
ON c.id1 = acq.id
JOIN persone ven
ON c.id2 = ven.id
LEFT JOIN agenti ON c.id3 = agenti.id
A funzionare funziona... il problema è che ci mette circa 40 secondi! contro i 0.0002 senza quest'ultima join...
E' vero che la tabella agenti contiene quasi 80.000 record... ma la query (alla quale ovviamente si aggiungono varie clausole WHERE) crea 50 risultati (a volte meno, a volte di piu... in ogni caso non da giustificare 40 secondi di query)
Forse bisogna dirgli di fare PRIMA le due join e sul risultato eseguire la terza?
Nel caso serva, spiego il senso della query:
tabella compravendite dove sono presenti i campi IDvenditore, IDacquirente, IDagente
l'IDvenditore c'è sempre, mentre gli altri due possono essere null
se però c'è IDacquirente, ovviamente c'è anche IDagente e in questo caso la query mi deve ritrovare il nominativo dell'IDagente che sta nella tabella agenti
quindi potrei avere un output del tipo:
PINCO PALLINO | MARIO ROSSI | GERONIMO
TIZIO | null | null
EDIT: in realtà mi sono accorto che il discorso non è esattamente così come detto in precedenza, ovvero: nella tabella compravendite c'è un'ulteriore campo, NUMERO, che è sempre presente (univoco)... se IDacquirente è presente, allora NUMERO serve da id per trovare l'agente...
quindi, ricapitolando, un possibile output è questo:
120466 | PINCO PALLINO | MARIO ROSSI | GERONIMO
120500 | TIZIO | null | null
in effetti lo si puo considerare come IDagente... da far comparire sempre come ID e solo in presenza di una vendita come NOMINATIVO...
Io mi sono perso, non so voi...