PDA

View Full Version : [SQL] operatori in e or


yuki78
21-03-2008, 13:34
Ciao a tutti!!!
Io dovrei fare una query piuttosto lunga... (cioè con un sacco di or ), sul manuale di sql dice che con l'istrozione in si può evitare di ripetere il codice...
Il problema però è che non mi restituisce lo stesso risultato!!!
Sapreste dirmi la differenza tra i due operatori??
Grazie mille
buona pasqua a tutti!!!

brigoly
21-03-2008, 13:41
gia nel thread precedente (che ti hanno chiuso) ti avevano dato 1 risposta, comunque, eccola qui:

OR:
SELECT nome,cognome
FROM alunni
WHERE nome='Paolo' or nome='Giacomo' or nome='Sarcxxxo';

IN:
SELECT nome,cognome
FROM alunni
WHERE nome IN ('Paolo','Giacomo','Sarcxxxo');

o anche

SELECT nome,cognome
FROM alunni
WHERE nome IN (SELECT nome FROM people2);


In pratica, con le "OR" hai dei confronti in pura algebra booleana, quindi se hai concatenato una serie di OR, basta che 1 delle condizioni venga verificata ed il record viene estratto.
Con le "IN" invece.... fai la stessa cosa, MA, compatti la scrittura della query... in altre parole, controlli se il campo a Sinistra della IN ha un valore tra quelli nella lista (che puo essere anche di 1 solo elemento tra l'altro, o anche il risultato di una sub-query) di destra della IN, se c'è il record viene estratto, altrimenti no.

caccia 1 urlo se non è chiaro ;)

yuki78
21-03-2008, 14:22
Grazie mille...

Non capisco però perchè mi vengono due risultati diversi...
mah???
Sbaglierò qualcosa..
Grazie ancora
Ciao ciao

brigoly
21-03-2008, 14:28
Grazie mille...

Non capisco però perchè mi vengono due risultati diversi...
mah???
Sbaglierò qualcosa..
Grazie ancora
Ciao ciao

beh, prova a postare il codice delle 2 query, cosi ti so dare 1 risposta piu precisa...

yuki78
21-03-2008, 15:38
Hai ragione, scusa ;)
:doh:
dunque quella con gli or è


select * from gruppi g where g.nome='pippo' and g.id ='98' or g.id ='104' or g.id ='120' or g.id ='124' or g.id ='126' or g.id ='127' or g.id ='150' or g.id ='141' or g.id ='142' or g.id ='149' or g.id ='151' or g.id ='152'


e quella con l'in è
select * from gruppi g where g.nome='pippo' and g.id IN ('98','104' ,'120','124','126' ,'127' ,'150' ,'141' ,'142' ,'149' ,'151' ,'152')

grazie
ciaco ciao

brigoly
21-03-2008, 15:46
Hai ragione, scusa ;)
:doh:
dunque quella con gli or è


select * from gruppi g where g.nome='pippo' and g.id ='98' or g.id ='104' or g.id ='120' or g.id ='124' or g.id ='126' or g.id ='127' or g.id ='150' or g.id ='141' or g.id ='142' or g.id ='149' or g.id ='151' or g.id ='152'


e quella con l'in è
select * from gruppi g where g.nome='pippo' and g.id IN ('98','104' ,'120','124','126' ,'127' ,'150' ,'141' ,'142' ,'149' ,'151' ,'152')

grazie
ciaco ciao

a prima vista la magia delle parentesi dovrebbe risolvere il tuo problema....
la prima query è sbagliata....
ecco le 2 query corrette:

select * from gruppi g where g.nome='pippo' and (g.id ='98' or g.id ='104' or g.id ='120' or g.id ='124' or g.id ='126' or g.id ='127' or g.id ='150' or g.id ='141' or g.id ='142' or g.id ='149' or g.id ='151' or g.id ='152')


e quella con l'in è
select * from gruppi g where g.nome='pippo' and g.id IN ('98','104' ,'120','124','126' ,'127' ,'150' ,'141' ,'142','149' ,'151' ,'152');

yuki78
25-03-2008, 13:29
grazie mille!!!

Mannaggia alle parentesi!!!
:D :D
CIAO CIAO