Manugal
30-01-2009, 10:45
Ciao a tutti!
Ho bisogno di eseguire una query che, date la tabella
Utenti(id,nickname,sesso,citta,paese)
Libri(idu,titolo,autore) (dove idu è l'id utente che ha quel libro)
mi tiri fuori tutte le coppie di utenti che hanno libri in comune. Ad esempio, se la tabella utenti è fatta così:
id nickname ecc. (tutti gli altri campi)
0 utente0
1 utente1
2 utente2
e quella libri è fatta così:
idu titolo autore
0 libro1 autore1
0 libro2 autore2
0 libro3 autore3
0 libro4 autore4
1 libro2 autore2
1 libro6 autore6
2 libro1 autore1
2 libro3 autore3
2 libro6 autore6
Vorrei che mi tirasse fuori questo:
id1 nickname1 id2 nickname2 NumLibriComune
0 utente0 1 utente1 1
0 utente0 2 utente2 2
1 utente1 2 utente2 1
Le due tabelle contengono migliaia di record. Infatti quando provavo a fare delle query il consumo di memoria saliva alle stelle, arrivando anche a più di 1GB. Già facendo una query simile (per prendere tutte le possibili coppie di utenti):
select u1.id, u1.nickname, u2.id, u2.nickname
from utenti u1, utenti u2
where u1.id<>u2.id
il consumo di memoria (visto da Task Manager) è arrivato a 400MB.
Una cosa del genere in SQL è possibile farla? Posso anche evitare di segnarmi l'attributo NumLibriComune, però in quel caso ci devono essere tante coppie quanti sono i libri in comune.
Spero di essere stato chiaro.
Ho bisogno di eseguire una query che, date la tabella
Utenti(id,nickname,sesso,citta,paese)
Libri(idu,titolo,autore) (dove idu è l'id utente che ha quel libro)
mi tiri fuori tutte le coppie di utenti che hanno libri in comune. Ad esempio, se la tabella utenti è fatta così:
id nickname ecc. (tutti gli altri campi)
0 utente0
1 utente1
2 utente2
e quella libri è fatta così:
idu titolo autore
0 libro1 autore1
0 libro2 autore2
0 libro3 autore3
0 libro4 autore4
1 libro2 autore2
1 libro6 autore6
2 libro1 autore1
2 libro3 autore3
2 libro6 autore6
Vorrei che mi tirasse fuori questo:
id1 nickname1 id2 nickname2 NumLibriComune
0 utente0 1 utente1 1
0 utente0 2 utente2 2
1 utente1 2 utente2 1
Le due tabelle contengono migliaia di record. Infatti quando provavo a fare delle query il consumo di memoria saliva alle stelle, arrivando anche a più di 1GB. Già facendo una query simile (per prendere tutte le possibili coppie di utenti):
select u1.id, u1.nickname, u2.id, u2.nickname
from utenti u1, utenti u2
where u1.id<>u2.id
il consumo di memoria (visto da Task Manager) è arrivato a 400MB.
Una cosa del genere in SQL è possibile farla? Posso anche evitare di segnarmi l'attributo NumLibriComune, però in quel caso ci devono essere tante coppie quanti sono i libri in comune.
Spero di essere stato chiaro.