[DISTINCT] SQL persone che hanno almeno un hobby[Risolto]
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- raffaele181188
- Packager
- Messaggi: 789
- Iscritto il: ven 7 set 2007, 21:40
- Nome Cognome: Raffaele
- Slackware: current
- Kernel: 2.6.29.6
- Desktop: KDE 4.3
- Distribuzione: Ubuntu
- Località: DearSkin (FG)
[DISTINCT] SQL persone che hanno almeno un hobby[Risolto]
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
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
Ultima modifica di raffaele181188 il mar 14 lug 2009, 21:50, modificato 1 volta in totale.
- DavidZ
- Packager
- Messaggi: 111
- Iscritto il: mer 9 mar 2005, 0:00
- Slackware: 14.2 x86_64
- Kernel: 4.4.19
- Desktop: kde 4.14.21
- Località: alto Vicentino
Re: MySQL persone che hanno almeno un hobby
prova a guardarti la clausula DISTINCT dell'SQL, penso sia quello che ti serve
- raffaele181188
- Packager
- Messaggi: 789
- Iscritto il: ven 7 set 2007, 21:40
- Nome Cognome: Raffaele
- Slackware: current
- Kernel: 2.6.29.6
- Desktop: KDE 4.3
- Distribuzione: Ubuntu
- Località: DearSkin (FG)
Re: MySQL persone che hanno almeno un hobby
Grzie mille sto vedendo anche il GROUP BY
-
- Iper Master
- Messaggi: 3961
- Iscritto il: ven 14 mag 2004, 0:00
Re: MySQL persone che hanno almeno un hobby
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.
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
Se non ho capito male dovrebbe essere
non dovrebbe servire il "distinct"
oppure
(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
Codice: Seleziona tutto
select persona
from persone
where id_persona in (select id_persona from personahobby)
oppure
Codice: Seleziona tutto
select distinct persona
from persone
right outer join personahobby on (persone.id_persona=personahobby.id_persona)
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
- DavidZ
- Packager
- Messaggi: 111
- Iscritto il: mer 9 mar 2005, 0:00
- Slackware: 14.2 x86_64
- Kernel: 4.4.19
- Desktop: kde 4.14.21
- Località: alto Vicentino
Re: MySQL persone che hanno almeno un hobby
Concordo pienamente io cerco sempre di evitare IN soprattutto in presenza di molti record nelle tabelle è lentissimaSustuso 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
strana query IMHO credo di non aver mai usato RIGHT JOINSustuso ha scritto:Codice: Seleziona tutto
select distinct persona from persone right outer join personahobby on (persone.id_persona=personahobby.id_persona)
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)
Re: MySQL persone che hanno almeno un hobby
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 altroDavidZ ha scritto:
strana query IMHO credo di non aver mai usato RIGHT JOIN
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
- raffaele181188
- Packager
- Messaggi: 789
- Iscritto il: ven 7 set 2007, 21:40
- Nome Cognome: Raffaele
- Slackware: current
- Kernel: 2.6.29.6
- Desktop: KDE 4.3
- Distribuzione: Ubuntu
- Località: DearSkin (FG)
Re: MySQL persone che hanno almeno un hobby
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 )
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 )