Selezione multipla su SQL

lunedì 07 gennaio 2008 - 15.08

denis.basei Profilo | Senior Member

Immaginate di avere una tabella con un unico campo Codice che contiene i seguenti valori: 1234, 5678, 9123, 9654
Voglio fare una selezione che mi ritorni dei records solo se tra i valori del campo Codice ci sono i valori 1234 e 9654.
Se faccio una query del tipo SELECT Codice from Tabella where Codice = 1234 OR Codice = 9654 mi ritorna dei records anche
se esiste solo uno dei due valori.

Uso SQL server express 2005. Non ho postato la struttura della tabella perchè è semplice.


Grazie mille a chi mi aiuterà.

Denis
Denis B. - www.baseiengineering.com

lbenaglia Profilo | Guru

>Immaginate di avere una tabella con un unico campo Codice che
>contiene i seguenti valori: 1234, 5678, 9123, 9654
>Voglio fare una selezione che mi ritorni dei records solo se
>tra i valori del campo Codice ci sono i valori 1234 e 9654.
Tra i valori? Che significa?

>Se faccio una query del tipo SELECT Codice from Tabella where
>Codice = 1234 OR Codice = 9654 mi ritorna dei records anche
>se esiste solo uno dei due valori.
>
>Uso SQL server express 2005. Non ho postato la struttura della
>tabella perchè è semplice.
Male, infatti non ho capito il senso della tua domanda

Posta un sempio COMPLETO con la struttura della tabella (CREATE TABLE), alcune righe di prova (INSERT INTO) ed il risultato che ti aspetti con quei dati.

>Grazie mille a chi mi aiuterà.
Prego.

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

Wamba Profilo | Expert

>Immaginate di avere una tabella con un unico campo Codice che
>contiene i seguenti valori: 1234, 5678, 9123, 9654
>Voglio fare una selezione che mi ritorni dei records solo se
>tra i valori del campo Codice ci sono i valori 1234 e 9654.
>Se faccio una query del tipo SELECT Codice from Tabella where
>Codice = 1234 OR Codice = 9654 mi ritorna dei records anche
>se esiste solo uno dei due valori.

Non ho capito, il campo codice può assumere solo uno dei valori.
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
blogs.dotnethell.it/Wamblog/

alx_81 Profilo | Guru

>Immaginate di avere una tabella con un unico campo Codice che
>contiene i seguenti valori: 1234, 5678, 9123, 9654
>Voglio fare una selezione che mi ritorni dei records solo se
>tra i valori del campo Codice ci sono i valori 1234 e 9654.
>Se faccio una query del tipo SELECT Codice from Tabella where
>Codice = 1234 OR Codice = 9654 mi ritorna dei records anche
>se esiste solo uno dei due valori.
>
>Uso SQL server express 2005. Non ho postato la struttura della
>tabella perchè è semplice.
No , ti consiglio di postare sia la struttura sia un elenco di record sia il risultato che vuoi ottenere. Così possiamo essere più precisi nella risposta
>
>
>Grazie mille a chi mi aiuterà.
di nulla!
>
>Denis
>Denis B. - www.baseiengineering.com

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

allforum Profilo | Junior Member

..... credo che Denis intenda dire che vuole ottenere il risultato della select
SOLO SE NELLA TABELLA SONO PRESENTI ENTRAMBI I CODICI.

Ho capito bene ?

lbenaglia Profilo | Guru

>..... credo che Denis intenda dire che vuole ottenere il risultato
>della select
>SOLO SE NELLA TABELLA SONO PRESENTI ENTRAMBI I CODICI.
Quale risultato?

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

denis.basei Profilo | Senior Member

... ecco quanto richiesto

USE [AppWorkdb]
GO
/****** Object: Table [dbo].[Carico_Esempio] Script Date: 01/07/2008 16:47:50 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Carico_Esempio](
[Codice] [smallint] NULL
) ON [PRIMARY]
go

INSERT INTO [AppWorkdb].[dbo].[Carico_Esempio]
([Codice])
VALUES
(1234)

INSERT INTO [AppWorkdb].[dbo].[Carico_Esempio]
([Codice])
VALUES
(4567)

Vorrei scrivere una query che mi ritorni dei records SOLO se esistono i codici 1234 e 4567 nella tabella.
Denis B. - www.baseiengineering.com

lbenaglia Profilo | Guru

>INSERT INTO [AppWorkdb].[dbo].[Carico_Esempio]
> ([Codice])
> VALUES
> (1234)
>
>INSERT INTO [AppWorkdb].[dbo].[Carico_Esempio]
> ([Codice])
> VALUES
> (4567)
>
>Vorrei scrivere una query che mi ritorni dei records SOLO se
>esistono i codici 1234 e 4567 nella tabella.

Denis,

cerca di essere meno ermetica
Posta altre 10 INSERT.

Quali righe vorresti ottenere in output?
Tutte?
Alcune? In base a quale criterio?

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

lbenaglia Profilo | Guru

Per adesso ti posto questo esempio in modo da avere una base su cui lavorare (anche se non sono convinto di aver interpretato correttamente quello che cerchi):

USE tempdb; CREATE TABLE dbo.Carico_Esempio( Codice smallint NULL ); INSERT dbo.Carico_Esempio VALUES(1234); INSERT dbo.Carico_Esempio VALUES(1); INSERT dbo.Carico_Esempio VALUES(2); INSERT dbo.Carico_Esempio VALUES(3); INSERT dbo.Carico_Esempio VALUES(4); INSERT dbo.Carico_Esempio VALUES(5); SELECT * FROM dbo.Carico_Esempio WHERE EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 1234 ) AND EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 9654 ); /* Output: Codice ------ (0 row(s) affected) */ INSERT dbo.Carico_Esempio VALUES(9654); SELECT * FROM dbo.Carico_Esempio WHERE EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 1234 ) AND EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 9654 ); /* Output: Codice ------ 1234 1 2 3 4 5 9654 (7 row(s) affected) */ DROP TABLE dbo.Carico_Esempio;

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

denis.basei Profilo | Senior Member

Nel secondo output (quello con 7 righe) vorrei che mi fossero ritornate solo le righe con codice 1234 e 9654.
E' possibile costruire una query che faccia una selezione di questo tipo?


... coso mai "ermetico", sono uomo.


Grazie
Denis B. - www.baseiengineering.com

denis.basei Profilo | Senior Member

hai capito bene!
Denis B. - www.baseiengineering.com

lbenaglia Profilo | Guru

>hai capito bene!
Cosa?!
In soldoni l'esempio che ti ho suggerito va bene oppure no?

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

denis.basei Profilo | Senior Member

Non va bene perchè mi dovrebbe ritornare 2 records e non 7.



Denis B. - www.baseiengineering.com

lbenaglia Profilo | Guru

>Non va bene perchè mi dovrebbe ritornare 2 records e non 7.
E aggiungere una clausola IN?

USE tempdb; CREATE TABLE dbo.Carico_Esempio( Codice smallint NULL ); INSERT dbo.Carico_Esempio VALUES(1234); INSERT dbo.Carico_Esempio VALUES(1); INSERT dbo.Carico_Esempio VALUES(2); INSERT dbo.Carico_Esempio VALUES(3); INSERT dbo.Carico_Esempio VALUES(4); INSERT dbo.Carico_Esempio VALUES(5); SELECT * FROM dbo.Carico_Esempio WHERE EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 1234 ) AND EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 9654 ) AND Codice IN(1234, 9654); /* Output: Codice ------ (0 row(s) affected) */ INSERT dbo.Carico_Esempio VALUES(9654); SELECT * FROM dbo.Carico_Esempio WHERE EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 1234 ) AND EXISTS( SELECT * FROM dbo.Carico_Esempio WHERE Codice = 9654 ) AND Codice IN(1234, 9654); /* Output: Codice ------ 1234 9654 (2 row(s) affected) */ DROP TABLE dbo.Carico_Esempio;

E' questo il risultato che volevi?

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

denis.basei Profilo | Senior Member

...sì ci siamo. Scusa se non sono riuscito a spiegarmi bene subito.


Grazie, adesso confermo l'accettazione della risposta.


Ciao
Denis B. - www.baseiengineering.com
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