[SQL]Query doppia

lunedì 01 settembre 2008 - 11.27

guli Profilo | Junior Member

Salve a tutti deo creare una query che date due tabelle tab1(id, valore) e tab2(id, valore) controlli se questo valore "CONTROLLA" si trova in una delle due tabelle...grazie anticipatamente

lbenaglia Profilo | Guru

>Salve a tutti deo creare una query che date due tabelle tab1(id,
>valore) e tab2(id, valore) controlli se questo valore "CONTROLLA"
>si trova in una delle due tabelle...

Puoi essere un po' più precisa?
1) Che DBMS utilizzi?
2) Puoi postare i comandi DDL di CREATE TABLE per le due dabelle, alcune righe di prova (INSERT INTO) ed il result set che vorresti ottenere in output?

>grazie anticipatamente
Prego.

Ciao!

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

guli Profilo | Junior Member

allora mi spiego meglio...ho due tabelle tab1(id,valore) tab2(id,valore) devo farmi restituire id e valore di una delle due tabelle a seconda se questo valore "100"compaia in tab1 o tab2...scusami prima ho scritto creare ed ho sbagliato...

lbenaglia Profilo | Guru

>allora mi spiego meglio...ho due tabelle tab1(id,valore) tab2(id,valore)
>devo farmi restituire id e valore di una delle due tabelle a
>seconda se questo valore "100"compaia in tab1 o tab2...scusami
>prima ho scritto creare ed ho sbagliato...
Che DBMS utilizzi?
Se 100 è presente in entrambe che risultato ti aspetti? 2 righe?
Ti interessa sapere la tabella che contiene il valore? (Restituendo solo ID e Valore non hai questa informazione)
Perché non rispondi alle mie domande?

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

guli Profilo | Junior Member

questo valore, per certo si trova in una delle due e non in entrambi...cmq voglio che mi restituisca id e valore..

lbenaglia Profilo | Guru

>questo valore, per certo si trova in una delle due e non in entrambi...cmq
>voglio che mi restituisca id e valore..
Bene, dato che non mi hai ancora detto con che DBMS stai lavorando e nemmeno se ti interessa sapere quale tabella contiene l'informazione, ti posto un esempio per SQL Server (versione 2005 o superiore):

USE tempdb; CREATE TABLE dbo.tab1( id int NOT NULL PRIMARY KEY, Valore varchar(10) NOT NULL ); CREATE TABLE dbo.tab2( id int NOT NULL PRIMARY KEY, Valore varchar(10) NOT NULL ); INSERT dbo.tab1 VALUES(10, 'Valore 10'); INSERT dbo.tab1 VALUES(20, 'Valore 20'); INSERT dbo.tab1 VALUES(30, 'Valore 30'); INSERT dbo.tab2 VALUES(100, 'Valore 100'); INSERT dbo.tab2 VALUES(200, 'Valore 200'); INSERT dbo.tab2 VALUES(300, 'Valore 300'); WITH CTE_Valori AS ( SELECT id, Valore FROM dbo.tab1 UNION ALL SELECT id, Valore FROM dbo.tab2 ) SELECT * FROM CTE_Valori WHERE id = 100; /* Output: id Valore ----------- ---------- 100 Valore 100 (1 row(s) affected) */ DROP TABLE dbo.tab1, dbo.tab2;

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

guli Profilo | Junior Member

la tabella che mi interessa sapere l'informazione dipende da dove si trova il dato se nella tab1 o tab2...e utilizzo SQL Server

lbenaglia Profilo | Guru

>la tabella che mi interessa sapere l'informazione dipende da
>dove si trova il dato se nella tab1 o tab2...e utilizzo SQL Server

Che significa questa frase?
Se ti interessa conoscere la tabella basta aggiungere una nuova colonna al result set:

USE tempdb; CREATE TABLE dbo.tab1( id int NOT NULL PRIMARY KEY, Valore varchar(10) NOT NULL ); CREATE TABLE dbo.tab2( id int NOT NULL PRIMARY KEY, Valore varchar(10) NOT NULL ); INSERT dbo.tab1 VALUES(10, 'Valore 10'); INSERT dbo.tab1 VALUES(20, 'Valore 20'); INSERT dbo.tab1 VALUES(30, 'Valore 30'); INSERT dbo.tab2 VALUES(100, 'Valore 100'); INSERT dbo.tab2 VALUES(200, 'Valore 200'); INSERT dbo.tab2 VALUES(300, 'Valore 300'); WITH CTE_Valori AS ( SELECT id, Valore, 'tab1' AS Tabella FROM dbo.tab1 UNION ALL SELECT id, Valore, 'tab2' FROM dbo.tab2 ) SELECT * FROM CTE_Valori WHERE id = 100; /* Output: id Valore Tabella ----------- ---------- ------- 100 Valore 100 tab2 (1 row(s) affected) */ DROP TABLE dbo.tab1, dbo.tab2;
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

guli Profilo | Junior Member

allora mi deve resituire id e valore...ma devo controllare se il valore="PROVA" si trova nella tab1 o nella tab2...se si trova nella tab1 mi restiuisce id e valore( che è =prova) della tab1, così ugualm x la tab2...nn so se sono stato chiaro

lbenaglia Profilo | Guru

>allora mi deve resituire id e valore...ma devo controllare se
>il valore="PROVA" si trova nella tab1 o nella tab2...se si trova
>nella tab1 mi restiuisce id e valore( che è =prova) della tab1,
>così ugualm x la tab2...nn so se sono stato chiaro

No, per niente.
O posti un esempio completo come ho fatto io, oppure mi spiace ma non posso darti una mano.


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

guli Profilo | Junior Member

SELECT ID,VALORE
FROM TAB1,TAB2
WHERE TAB1.VALORE="prova" OR TAB2.VALORE="prova"

ecco un esempio ke nn so se sintatticamente è giusto...così si capisce qualcosa di quello che volgio dire?

lbenaglia Profilo | Guru

>SELECT ID,VALORE
>FROM TAB1,TAB2
>WHERE TAB1.VALORE="prova" OR TAB2.VALORE="prova"
>
>ecco un esempio ke nn so se sintatticamente è giusto...così si
>capisce qualcosa di quello che volgio dire?
No dato che il tuo esempio è sintatticamente errato.
Scusa, tramite UNION fondi insieme i due result set, cos'altro ti serve?
Mah...

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

guli Profilo | Junior Member

in questo modo va bene?
SELECT id, value, tag
FROM tab1
WHERE value = '01'

UNION

SELECT id, value
FROM tab1
WHERE value = '01'

lbenaglia Profilo | Guru

>in questo modo va bene?
>SELECT id, value, tag
>FROM tab1
>WHERE value = '01'
>
>UNION
>
>SELECT id, value
>FROM tab1
>WHERE value = '01'

A parte il fatto che stai eseguendo la UNION sulla stessa tabella, vieni a chiederlo a me?
Da quello che ho capito tutto quello che ti serve è nel primo esempio di codice che ti ho dato, ma non ne ho la certezza matematica dato che non ti ho vista molto collaborativa nel spiegare quello che ti serve.

Dopo una marea di post non so ancora con che versione ed edizione di SQL Server stai lavorando, ti ho fornito ben 2 esempi su cui ragionare, ma sono passati inosservati... a questo punto spera che qualcuno "più sveglio" di me venga a darti una mano...
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

guli Profilo | Junior Member

cmq....grazie e ciao

lobax Profilo | Junior Member

forse solo questo,non ho ben capito nemeno io,e nemmeno a cosa puo servire,poi puoi mettere clausele left o right per visulaizzare i dati di una tabella piuttosto che l'altra.

ciao loris

SELECT Categories.prova, Products.prova AS ctrl2
FROM Categories INNER JOIN
Products ON Categories.CategoryID = Products.CategoryID
WHERE (Categories.prova = 2) OR
(Products.prova = 2)

lbenaglia Profilo | Guru

>SELECT Categories.prova, Products.prova AS ctrl2
>FROM Categories INNER JOIN
>Products ON Categories.CategoryID = Products.CategoryID

Dato che non ci saranno ID comuni tra le due tabelle, una INNER JOIN restituirà un result set vuoto...

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

lobax Profilo | Junior Member

>>SELECT Categories.prova, Products.prova AS ctrl2
>>FROM Categories INNER JOIN
>>Products ON Categories.CategoryID = Products.CategoryID
>
>Dato che non ci saranno ID comuni tra le due tabelle, una INNER
>JOIN restituirà un result set vuoto...
>
>Ciao!
>--
>Lorenzo Benaglia
>Microsoft MVP - SQL Server
>http://blogs.dotnethell.it/lorenzo/
>http://italy.mvps.org
questo si un id comune lo do x scontato CROSS JOIN? dovrebbe andare

lbenaglia Profilo | Guru

>questo si un id comune lo do x scontato CROSS JOIN? dovrebbe
>andare
Una CROSS JOIN esegue il prodotto cartesiano tra le due tabelle, che è diverso dalla UNION delle righe.
Ripeto, il problema dovrebbe risolversi con il primo esempio proposto.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5