Newsgroup: it.lavoro.informatica
Titolo: SQL nested...

Salve ragazzi.
Avrei bisogno di sapere se
solo con 'SQL del DB2
è possibile realizzare una SElect innestata
su una SELECT una coppia di chiavi.
Mi spiego:
è possibile fare una cosa del genere?
/************************/
Select a, b, v...
from TABLE T,U,Z...
...where...
<x e y> IN
(
select x,y from ....
)
/************************/
Devo ricostruire un recordset su + quey in pratica,
ma la query innestata dovrebbe potersi realizzare su una COPPIA di
chiavi
e non su una sola, come è tipico nella clause 'IN'.
C'è una qualche maniera per farlo dunque da SQL
oppure sarà necessario risolvere la cosa in codice (purtroppo
VB6.0....)?

 ha scritto nel messaggio 
news:1148899746.9...@38g2000cwa.googlegroups.com...
è possibile fare una cosa del genere?
/************************/
Select a, b, v...
from TABLE T,U,Z...
...where...
<x e y> IN
(
select x,y from ....
)
/************************/
Beh, innanzitutto potresti chiedere su un newsgroup relativo all'SQL :-)
Poi potresti provare con
SELECT a,b,c
FROM t1,t2,t3
WHERE
x IN (SELECT x FROM ...)
AND
y IN (SELECT y FROM ...)
Se il DB è furbo, non dovresti avere nemmeno grosse penalizzazioni 
dall'eseguire la subquery 2 volte.
Massimo

 /************************/
Che poi, scusa, che intendi di preciso?
Vuoi le righe dove c'è una coppia x,y che compare anche nell'output della 
subquery, oppure ti bastano quelle in cui x e y siano contenuti nel 
risultato, anche separatamente?
Nel primo caso, è un po' più difficile.
Massimo


Non si capisce molto quello che ti serve.
Una possibile interpretazione può essere quella di usare una join:
select T.*
from T inner join (select x,y from ....) S
on T.x= S.x and T.y= S.y
Nella tua from specifichi più tabelle, sarà la vecchia sintassi per fare i
join, quindi nessun problema ad aggiungere altri join alla query di
esempio che ho postato.
Ciao, Alessandro
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Ecco.. era la prima.
Fintantochè faccio una select del genere
Select T.* from T
where T.a in (select B.a where ....)
Nessun problema anche se faccio
Select T.* from T
where T.a in (select B.a where ....)
and T.b in (select C.y where ....)
ma se volessi che a e b siano una coppia di chiavi che individuano la
chiave di ricerca
nella select?
in altre parole: vorrei poter fare una cosa del genere:
(naturalmente  la sintassi non credo sia questa..)
/**********************************/
select T.*
from T where
<T.a AND T.b> in (Select a, b from .....)
/**********************************/
o anche
/**********************************/
select T.*
from T where
<T.a AND T.b> in ([1,2],[3,5],[3,4]...)
/**********************************/
mettete che T.a corrisponde ad un porgressivo e T.b l'ID dell'oggetto a
cui si riferisce quel progressivo,
e voglio cercare le informazioni relative
- all' oggetto i (i=[1,n])
- relativamente al max progressivo, max(j), disponibile per l'oggetto i
(j=[1,m]).
Ma Probabilmente imposto male il problema....
e lo spero a questo punto

Concretizzo un po' il problema.
Da una tabelle magazzino  in cui
del tipo
Magazzino (
PROGRESSIVO p.k,
ID_OGG p.k,
....
....
....
)
voglio selezionare le informazioni relative ad OGNI id_oggetto
rispetto al loro ultimo progressivo,
e metterle tutte insieme in un recordset.
senza dover per esempio ciclare su ogni id_ogg disp
la query che
seleziona le informazioni relative ad UN oggetto in particolare
rispetto al suo ultimo progressivo,
e metterle tutte insieme in un recordset, ma da codice... sempre che
sia possibile..


select m.*
from
Magazzino m inner join (
   select ID_OGG, Max (PROGRESSIVO) as MaxPROGRESSIVO
   from Magazzino
   group by ID_OGG
) mi
on m.ID_OGG= mi.ID_OGG and m.PROGRESSIVO= mi.MaxPROGRESSIVO
Se non sbaglio la sintassi è ANSI-SQL, quindi dovrebbe funzionarti da per
tutto, garantisco per SQL Server.


Apperò.
Controllo subito.
Grazie.
Assai pure. :)

 è possibile fare una cosa del genere?
Hint 1:
Concateni i due campi in una stringa
Hint 2:
Definisci con quella query una vista logica "al volo" e la metti in
inner join. L'effetto dovrebbe essere lo stesso.
Esempio:
SELECT * FROM TABLE AS T
INNER JOIN (SELECT X, Y ...) AS T2 ON T.X = T2.X AND T.Y = T2.Y

stormyever wrote:
[cut]
hint3:
it.comp.software.database
ciao
-- 
Gianluca

Ok. 
Sono andate bene entrambe le ultime due soluzioni.
Graziassai.