Newsgroup: it.comp.lang.visual-basic
Titolo: Query semplice

Mi sembrava semplice invece mi sto perdendo :(
Per semplificare, ho una tabella col nome della frutta e il colore:
Mela    Verde
Mela    Rossa
Pera    Rossa
Vorrei estrarre nome e colore dei frutti che hanno SOLO il colore rosso
-- 
Greg 

 ha scritto nel messaggio 
news:fhmnbd$fjc$1...@tdi.cu.mi.it...

Select nome,colore from frutti where colore='rosso'........
No?? 

Pianto Tardivo ha scritto:

No. Perchè cosi tira fuori mele e pere.
Invece deve tirar fuori solo le pere.
-- 
Greg 

 No [...] deve tirar fuori solo le pere.
?!?
SELECT `nome`, `colore` FROM `frutta` WHERE `nome`='Pera' AND 
`colore`='Rossa'
Ma temo che non sia neanche questo quello che vuoi, vero?
Lokar 

 Invece deve tirar fuori solo le pere.
Eh ma se tu non lo dici non ce lo possiamo inventare ;-)
"Select nome,colore from frutti where colore='rosso' and nome = 'Pera'"
ciao
stefano

>> Pera    Rossa
Una piccola considerazione,
una tabella che contiene i dati come li hai specificati tu è formalmente 
non corretta, in pratica non è normalizzata.
Dovresti separare la singola tabella in due distinte,
una che contiene i nomi dei frutti e una che contiene i colori.
IdFrutto
NomeFrutto
CodColore
IdColore
NomeColore
ciao
stefano

"Lokar"

ne dubito. lui come esempio ha messo 2 frutti, ma potevano essere 2000, 1500 
dei quali con piu' di un colore. lui vuole qualunque frutto sia solo rosso. 
tipo qualche distinct sul colore.
ma io lavoro anche il sabato mattina e mo' sono cotto come una pera/mela 
cotta. ALBE dove ti sei imboscato? :)
ciao, a.


Potrebbe essere:
SELECT Nome,First(Colore)
FROM Frutti
GROUP BY Nome
HAVING Count(*)=1
AND First(Colore)="Rossa"
Bye
Raf

 stefano
Daccordissimo. Per semplificare  l'ho presentata come tabella, ma in realtà 
è una query.
Le tabelle son fatte bene, ma diciamo che adesso ho bisogno si sapere  chi 
ha ordinato frutti il cui colore è solo rosso, quindi una cosa che è 
ricavabile solo dalla query e non dalle tabelle base.
-- 
Greg 

ricavabile solo dalla query e non dalle tabelle base.
e' ovviamente fuori luogo..
resta ancora la necessita' di vedere queste "tabelle ben fatte" :)
saluti
-- 
Andrea Montanari (Microsoft MVP - SQL Server)
http://www.asql.biz
 
http://italy.mvps.org
DbaMgr2k ver 0.21.0 - DbaMgr ver 0.65.0 and further SQL Tools
--------- remove DMO to reply 

 saluti
ciao
stefano

Andrea Montanari ha scritto:
Oddio come siamo precisini :)
Ma avete ragione.
Sono io che per esemplificare mi sono tirato la zappa sui piedi.
In realtà si tratta di turni di lavoro, effettuati dai dipendenti presenti 
in una tabella.
Ogni turno è di un certo tipo indicato con un numero da 1 a 4
Nella tabella generale, diciamo dei turni lavorati, abbiamo tutti i turni 
eggettuati da tutti i dipendenti, con tutti i dati di quel record compreso 
l'ID del lavoratore e il codice del turno.
Tutti i lavoratori hanno in questo tabellone tantissimi turni, di un codice 
compreso tra 1 e 4.
Magari tutti hanno fatto almeno una volta il turno 4, mentre io vorrei 
sapere sapere chi ha fatto solo e sempre  il 4 e non altri.
Nel frattempo ho risolto ciclando sul recordset, ma non è carino, se trovo 
subito il dato è meglio, piu chiaro, e si risparmia tempo.
Grazie a tutti per l'attenzione, in ogni caso, che è pure sabato pomeriggio 
:)
-- 
Greg 

 :)
SELECT idlavoratore, idturno  from tabella where idturno = 4  group by 
idlavoratore, idturno having count(*) = 1
ciao
stefano
p.s.
controllala perchè ultimamente sto scrivendo qualche cretinata di troppo

 controllala perchè ultimamente sto scrivendo qualche cretinata di troppo
CVD ...
forse è meglio che spenga tutto e mi riposi un pochino.
sorry
ciao
stefano

 sapere sapere chi ha fatto solo e sempre il 4 e non altri.
Per sapere chi ha fatto il turno numero 4:
SELECT IDDipendente FROM TabellaGenerale WHERE IDTurno = 4
Per sapere chi ha fatto solo il turno numero 4:
SELECT IDDipendente FROM TabellaGenerale WHERE NOT IN(SELECT IDDipendente
FROM TabellaGenerale WHERE IDTurno < 4)
Naturalmente questa sopra becca anche i dipendenti il cui campo turno è
vuoto o contiene 5 o 6. Quindi, se non è vero che i turni sono solo 1, 2, 3
o 4, se non è vero che cerchi il turno 4, se non è vero che i turni sono
numerati, se il campo turno può essere vuoto, insomma se per semplificare ci
hai ancora taciuto qualcos'altro, la query diventa:
SELECT IDDipendente FROM TabellaGenerale WHERE NOT IN(SELECT IDDipendente
FROM TabellaGenerale WHERE IDTurno = 1 OR IDTurno = 2 OR IDTurno = 3) AND
IDTurno = 4
...e spero che ti sia utile per capire il concetto ed eventualmente
modificarla tu stesso secondo le tue reali esigenze.
Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 modificarla tu stesso secondo le tue reali esigenze.
La 2 va benissimo, ma quanta grazia :) Mica una addirittura 4. Muy obligado 
:)
Purtroppo ste subselect, tanto utili, non le ho afferrate da piccolo e per 
me sono sempre un problema.
Tante volte mi sono messo a comprenderle, li per li tutto chiaro, ma quando 
dopo un po mi servono.... buf, svanito tutto, e comuqnue "non mi vengono" , 
non ci riesco a ragionare.
Ma grazie anche a tutti gli altri che si sono prestati :)
-- 
Greg 

 NomeColore
Me lo spieghi bene...? Perché non posso utilizzare un'unica tabella ma 
devo per forza, per normalizzarla, <<dividerla>> in due. Te lo dico 
perché sto leggendo proprio il capitolo su SQL (l'esempio del colore 
delle autovetture).
Ciao,

 delle autovetture).
Innanzi tutto, l'esempio che ho portato non è formalmente corretto, 
quello giusto è l'appunto che ha apportato Andrea Montanari
IdFrutto
NomeFrutto
IdColore
NomeColore
IdFrutto
IdColore
Fatta questa doverosa precisazione, passiamo al problema.
Non è che te lo ordina il dottore di suddividere una tabella in più 
parti, fa parte di quell'insieme di regole di buona programmazione che 
consentono di rendere un programma (e quanto ne deriva) più lineare, di 
più semplice manutenzione, meno soggetto ad errori e così via.
Veniamo al tuo esempio Macchine-Colore
Immaginiamo di avere una tabella autovetture che in una prima stesura 
scriviamo così:
IdAutovettura
Modello
Colore
Ci accorgiamo però che se dobbiamo inserire due modelli differenti con 
il medesimo colore (o due colori differenti per il medesimo modello) 
avremmo una duplicazione di informazioni
Panda - Gialo
Punto - Gialo
Opssssss, ho sbagliato scrivendo il colore,
devo modificare, solo che devo ripetere la stessa modifica in tutti i 
record in cui compare Gialo ... una bella palla.
Ecco che allora mi viene in aiuto la normalizzazione:
http://it.wikipedia.org/wiki/Normalizzazione_del_database
Allora separo la mia tabella monolitica in due tabelle:
IdAuto
Modello
IdColore
Colore
ora mi chiedo, in che relazione stanno queste due entità?
Una macchina può essere di colori differenti?
Si
Uno stesso colore può comparire su modelli differenti?
Si
ecco che ho una relazione n-n tra le due tabelle,
come le lego fra loro?
con una terza tabella, chiamata ponte (o di relazione) che contiene gli 
identificativi di entrambe le tabelle.
IdColore
IdAuto
quindi in definitiva avrò:
IdAuto
Modello
IdColore
IdAuto
IdColore
Colore
Questa una sintesi, spero sufficientemete chiara del problema.
ciao
stefano

 Questa una sintesi, spero sufficientemete chiara del problema.
ULTRACHIARISSIMO! Grazie 1000...