View Full Version : [SQL] operatori in e or
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!!!
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 ;)
Grazie mille...
Non capisco però perchè mi vengono due risultati diversi...
mah???
Sbaglierò qualcosa..
Grazie ancora
Ciao ciao
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...
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
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');
grazie mille!!!
Mannaggia alle parentesi!!!
:D :D
CIAO CIAO
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.