Ua select con un where

lunedì 17 luglio 2006 - 19.57

bluland Profilo | Guru


salve ho la seguente query

select campo from tabella where nome = 'italia' or nome = 'niente'


mi chiedevo se è possibile impostare la query in modo che SOLO se:
nome = italia non esiste passa a cercare nome = niente

insomma una classica if else, solo che la vorrei implementare in una query

idee?

saluti
ENzo

alx_81 Profilo | Guru

io farei (sono lanciato a risponderti =) )

select top 1 * from ( select id=1,campo from tabella where nome = 'italia' union all select id=2,campo from tabella where nome = 'niente' ) T order by id

fammi sapere!

Alx81 =)

http://blogs.dotnethell.it/suxstellino

totti240282 Profilo | Guru

sta union all
nn la conoscevo bene....
C'è solo un capitano !!!!!!

lbenaglia Profilo | Guru

>salve ho la seguente query
>
>select campo from tabella where nome = 'italia' or nome = 'niente'
>
>
>mi chiedevo se è possibile impostare la query in modo che SOLO
>se:
>nome = italia non esiste passa a cercare nome = niente
>
>insomma una classica if else, solo che la vorrei implementare
>in una query

Ciao ENzo,

non capisco, quella query restituisce tutte le righe che hanno la colonna nome valorizzata a "italia" o "niente". A cosa ti serve sapere se esiste o meno il valore "italia" "prima" di "niente"?!
A dire il vero in questo caso io utilizzerei l'operatore IN():

SELECT colonna1,..., colonnan FROM schema.tabella WHERE nome IN('italia', 'niente');

che dal punto di vista logico è del tutto equivalente alla query da te proposta.

Prova a postare un esempio completo con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il result set finale che vuoi ottenere.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

Per totti: Con sql server 2005 l'avrei fatta diversa, avrei usato le ranking functions..
se ti interessa.. te posso da' er post ner blog! =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Con sql server 2005 l'avrei fatta diversa, avrei usato le ranking
>functions..

?!
che c'entrano le funzioni di ranking per una banale IN()?

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

Se non ho capito male lui vuole trovare solo una riga e se si verifica la prima condizione vuole quella restituita dalla prima condizione, viceversa vuole la riga della seconda.. quindi pretende un ordine nel resultset.
Spero di aver capito bene.. =)
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Se non ho capito male lui vuole trovare solo una riga e se si
>verifica la prima condizione vuole quella restituita dalla prima
>condizione, viceversa vuole la riga della seconda.. quindi pretende
>un ordine nel resultset.
>Spero di aver capito bene.. =)

E se abbiamo 5 righe con la colonna nome valorizzata a "italia" e 4398562493 a "niente"?
Quante righe vuole?

Aspettiamo una risposta prima di sparare soluzioni a caso...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

Lui dice:

> mi chiedevo se è possibile impostare la query in modo che SOLO se:
> nome = italia non esiste passa a cercare nome = niente
> insomma una classica if else, solo che la vorrei implementare in una query

ok, comunque aspettiamo.. sorry
Alx81 =)

http://blogs.dotnethell.it/suxstellino

bluland Profilo | Guru

ok
scusate se non sono stato chiaro allora ecco la mia tabella (ruoli):

ha solo 2 campi:

user, ruolo

ecco un esempio di inserimento:

1. insert into ruoli(user,ruolo) values ('enzo','admin')

2. insert into ruoli(user,ruolo) values ('luca','superuser)


allora ecco la questione: nella select il campo user lo ricavo dalla windows authentication (s)

quindi ho select ruolo from ruoli where user = s

fino a qui tutto bene, POICHE' ho il problema che non posso inserire tutti gli utenti del dominio nella tabella e quindi definirne i ruoli ho pensato di inserire solo gli admin ed i superuser, e un SOLO user inventato da me ad esempio:

3. insert into ruoli(user,ruolo) values ('miouser,'user)

con privilegi di semplice user (solo lettura)
ECCO LA MIA IDEA: dove la select non incontra risultati ad esempio: select ruolo from ruoli where user = gigi VORREI fare in modo che se user=s (gigi) non esiste allora mi seleziona user= miouser

che ne dite?ditemi se non mi sono spiegato!! cmq alex credo che abbia capito....

lbenaglia Profilo | Guru

>ok
>scusate se non sono stato chiaro allora ecco la mia tabella
>(ruoli):

Che DBMS usi?


--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

alx_81 Profilo | Guru

avevo capito.. ma ora do ragione a Lorenzo.. perchè la sua soluzione, nel contesto ha molto più senso..
credo che con la IN() se tu hai risultati hai un ruolo, altrimenti se il numero delle righe tornate è 0, sei utente "user".
Quindi voto anche io per IN().
ciao!
Alx81 =)

http://blogs.dotnethell.it/suxstellino

bluland Profilo | Guru

sql enterprise manager

lbenaglia Profilo | Guru

>sql enterprise manager

Sigh... ti avevo chiesto il DBMS non lo strumento client per interrogarlo ... deduco allora che stai utilizzando SQL Server 2000.
Bene, perché inventarsi l'acqua calda quando SQL Server ha non 1 ma ben 2 modalità di autenticazione?
Studiati bene sui Books Online cosa si intende per login, user account e role, in questo modo potrai affidarti ad un robusto sistema di autenticazione e di autorizzazione senza scrivere un analogo sistema lato applicativo.

Ciao!

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

oh bella questa mi è nuova, ci sto ora dando un okkiata, e vedo che è una cosa devo studiare con molta calma, non avevo sentito di questa possibilità, vado a studiare

grazie

alx_81 Profilo | Guru

Ok.. dai ci siamo arrivati in fondo =)
Una domanda per Lorenzo, in questo caso è meglio spostarsi su un'autenticazione Form basata solo su ruoli configurati nel web.config? visto che sono pochi..
Alx81 =)

http://blogs.dotnethell.it/suxstellino

lbenaglia Profilo | Guru

>Una domanda per Lorenzo, in questo caso è meglio spostarsi su
>un'autenticazione Form basata solo su ruoli configurati nel web.config?
>visto che sono pochi..

Non posso rispondere a questa domanda per tutta una serie di motivi:

1) Non so se Enzo stia creando una web application o meno
2) Non so se l'applicazione girerà in dominio;
3) Non so se gli utenti fanno parte di un eventuale dominio oppure sono locali alla macchina
...

E' impossibile con i dati che abbiamo azzardare una risposta.
Secondo me si potrebbe operare in due modi:

1) Se siamo in dominio oppure se tutti gli utenti sono locali si potrebbero creare due gruppi (di dominio nel primo caso, locali nel secondo) dove mappare i vari utenti; a livello di SQL Server definire due login mappate su questi gruppi, 2 user accounts associati alle login e definire su di essi le dovute permission.

2) Definire due User-Defined SQL Server Database Roles a cui applicare le dovute permission come descritto in questo paragrafo dei BOL:

"User-Defined SQL Server Database Roles"
http://msdn.microsoft.com/library/en-us/adminsql/ad_security_6x5x.asp

Io mi fermo qua

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

domanda:

poiche ho circa 15 account che possono compiere operazioni di lettura, inserimento, modifica etc
ed altri 400 che dovrebbero poter compiere solo operazioni di lettura delle tabelle, leggo qui che per usare la win authentication bisogna specificare tutti gli account o i gruppi di Microsoft Windows NT® o Microsoft Windows® 2000 che possono connettersi a SQL Server 2000.

è cosi? ho c'è dell'altro?

poiche io vorrei specificare solo gli account che possono compiere particolari operazioni invece per tutti coloro che non verranno specificati sarà di default riservata la sola lettura...

saluti
Enzo

lbenaglia Profilo | Guru

>poiche io vorrei specificare solo gli account che possono compiere
>particolari operazioni invece per tutti coloro che non verranno
>specificati sarà di default riservata la sola lettura...

Temo che questo thread sarà infinito...
La tua applicazione funzionerà in dominio?
Se si, vale la pena considerare la Windows Authentication. Ora, non ti resta che definire 2 gruppi in AD con i tuoi 400 e passa utenti (lo fai in 3 secondi) e mappare solo i gruppi alle login SQL Server...

--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

bluland Profilo | Guru

AD= Active directory ?

totti240282 Profilo | Guru

certo vorrei sapere cosa sono
C'è solo un capitano !!!!!!
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5