Pagina 1 di 1
[DISTINCT] SQL persone che hanno almeno un hobby[Risolto]
Inviato: mar 14 lug 2009, 1:14
da raffaele181188
Salve, sarà l'ora

(e scusate per il titolo)
Ho due tabelle, "persona" e "hobby", e una terza tabella che associa una o più persone a uno o più hobby (questa tabella ha quindi, la colonna "persona" e la colonna "hobby")
Qual'è la query che mi serve per sapere tutte le persone che hanno almeno un hobby? (O, viceversa, tutti gli hobby che hanno almeno una persona appassionata)
Le query che ho provato non vanno bene perchè mi ritornano più volte la stessa persona se è associata a più hobby...
Quindi mi ritorna qualcosa tipo
Giancarlo
Raffaele
Raffaele
Raffaele
Antonio
se Raffaele è associato agli hobby "cucina", "caccia" e "pesca". A me serve
Giancarlo
Raffaele
Antonio
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 1:24
da DavidZ
prova a guardarti la clausula DISTINCT dell'SQL, penso sia quello che ti serve
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 7:21
da raffaele181188
Grzie mille

sto vedendo anche il GROUP BY
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 8:20
da Meskalamdug
Dopo aver fatto per bene le tabelle hobby e persone
supponiamo in hobby
aerei
auto
farfalle
e persone
mario
michele
maria
select persona from persone where hobby=aerei;
e ti torna tutte le persone dal db persone che hanno
hobby aerei
L'importante è fare bene le tabelle,con questa query precisa
non dovrebbe tornare errori.
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 9:43
da Sustuso
Se non ho capito male dovrebbe essere
Codice: Seleziona tutto
select persona
from persone
where id_persona in (select id_persona from personahobby)
non dovrebbe servire il "distinct"
oppure
Codice: Seleziona tutto
select distinct persona
from persone
right outer join personahobby on (persone.id_persona=personahobby.id_persona)
(qui il distinct serve)
non so quale sia la più veloce ma per esperienza direi la seconda....
di solito le query che hanno
in o
not in impiegano un botto per eseguirsi
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 10:18
da DavidZ
Sustuso ha scritto:
non so quale sia la più veloce ma per esperienza direi la seconda....
di solito le query che hanno in o not in impiegano un botto per eseguirsi
Concordo pienamente io cerco sempre di evitare IN soprattutto in presenza di molti record nelle tabelle è lentissima
Sustuso ha scritto:
Codice: Seleziona tutto
select distinct persona
from persone
right outer join personahobby on (persone.id_persona=personahobby.id_persona)
strana query IMHO credo di non aver mai usato RIGHT JOIN
personalmente avrei scritto
Codice: Seleziona tutto
select distinct persone.persona
from personahobby
inner join persone on (persone.id_persona=personahobby.id_persona)
inner join hobby on (hobby.id_hobby=personahobby.id_hobby)
con le query scritte in questo modo il plan analyzer che uso mi da sempre ottime prestazioni e che io sappia le inner sono le più performanti
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 17:22
da Sustuso
DavidZ ha scritto:
strana query IMHO credo di non aver mai usato RIGHT JOIN
Ha lo stesso effetto della left solo che lavora da destra a sinistra e per questo non viene usata (di solito si scambiano le tabelle in from e left outer join) ma visto che esiste il metodo ed i nomi stanno in una sola tabella perchè ingegnarsi ad usare altro
Comunque non ho trovato mai un sito completo sul linguaggio sql, quello che posso consigliare e di vedere tutte i metodi possibili e smanettarci un pò.
Si perde del tempo ma alla fine si a padroneggiare e col tempo ci si ingegna anche ad ottimizzare le chiamate per DB più grandi e complessi.
@raffaele181188
se sei alle prime armi fai anche attenzione ai nomi che dai ai campi e tabelle, è buono prendere un metodo per poi non perdere tempo a pensare se devi scrivere (ad esempio) persona o persone per la tabella, id_persona o id_persone per la chiave ecc., sembrano stupidate ma ...... si perde un botto di tempo a correggere errori del genere.
Saluti
Re: MySQL persone che hanno almeno un hobby
Inviato: mar 14 lug 2009, 21:50
da raffaele181188
Non sono proprio alle prime armi
L'esempio era molto semplificato, e mi ero dimenticato di dare dei dati fondamentali, ma a quanto pare DavidZ mi ha letto nel cervello
Mi serve il DISTINCT, nel database va inserito in una JOIN su tre/quattro tabelle (ora non ricordo di preciso)
Ovviamente i nomi delle tabelle sono di fantasia, e nelle JOIN uso sempre gli alias (per la cronaca, sono tabelle segrete segretissime che fra qualche tempo, spero, useremo tutti

)