Newsgroup: it.comp.software.database
Titolo: [ORACLE] Aiuto su join!

*
Ho il seguente PROBLEMA (reale!)
Date queste due tabelle
Tabella A        tabella B
----------       -----------
ID               K1
K1               K2
K2               K3
K3               K4
K4               K5
K5               VALORE_B
VALORE_A
e questi record:
Tabella A                   tabella B
----------------------      -----------
1  A  1  ITA  EUR  132      A 1 ITA EUR 100
2  A  1  ITA  EUR           A 2 ITA EUR  89
3  A  1  ITA  EUR           A 3 ITA EUR 239
4  A  2  ITA  EUR           
5  A  2  ITA  EUR  
6  A  3  ITA  EUR           
7  A  3  ITA  EUR           
8  A  3  ITA  EUR  258
9  A  4  ITA  EUR   79
si vuole ottenere
1  A  1  ITA  EUR  100
2  A  1  ITA  EUR     
3  A  1  ITA  EUR     
4  A  2  ITA  EUR  89 
5  A  2  ITA  EUR  
6  A  3  ITA  EUR     
7  A  3  ITA  EUR           
8  A  3  ITA  EUR  239
9  A  4  ITA  EUR     
E cioe:
il valore_a della tabella A deve essere sostituito dal valore_b della
tabella B quando nella tabella A non č valorizzato o quando nella
tabella B esiste, altrimenti riportare null
Ho provato con diverse join e outer join, ma il risultato č che ottengo
sempre la ripetizione del valore_b nell'output, come in questo modo:
1  A  1  ITA  EUR  100
2  A  1  ITA  EUR  100   
3  A  1  ITA  EUR  100   
4  A  2  ITA  EUR   89 
5  A  2  ITA  EUR   89
6  A  3  ITA  EUR   89   
7  A  3  ITA  EUR   89         
8  A  3  ITA  EUR  239
9  A  4  ITA  EUR   
Sicuramente non mi sto impegnando al 100%, ma, credetemi, non riesco a
"vedere" la soluzione.
Ovviamente i miei ringraziamenti a tutti in anticipo.
Fabio.
* Mi scuso per la lunghezza del post.
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 9  A  4  ITA  EUR     
se ti va bene la prima versione si puo' vedere di fare qualche cosa.


> se ti va bene la prima versione si puo' vedere di fare qualche cosa.
Ti ringrazio PK, ma forse con le mie parole ti ho portato fuori strada.
Tieni come riferimento la tabella di output desiderata dal mio cliente.
Grazie.


 tabella B esiste, altrimenti riportare null
proviamo:
update della colonna val_a di A con val_b di B, giusto ?
il join č per 
k1.a,k2.a,k3.a,k4.a e per 
k1.b,k2.b,k3.b,k4.b
dopo di che set = (select nvl(b.val_b,a.val_a)
                    from a , b
                   where K=K)
il concetto spero sia chiaro e sopratutto giusto, per la 
realizzazione mi ci un pň di tempo, visto che č tanto che 
non prgmmo.
occhio solo a nvl perchč mi sa che ci dovrebbe essere all'interno
di una decode !
ciao


questa select non risolve il tuo problema, infatti
SELECT 
A.ID
, A.K1, A.K2, A.K3, A.K4, A.K5, 
(CASE WHEN A.VALORE_A IS NOT NULL THEN B.VALORE_B ELSE NULL END) VALORE
FROM A, B
WHERE A.K1=B.K1(+)
AND A.K2=B.K2(+)
AND A.K3=B.K3(+)
AND A.K4=B.K4(+)
restituisce
ID     K1      K2        K3      K4          VALORE
1	A	1	ITA	EUR		100
2	A	1	ITA	EUR		
3	A	1	ITA	EUR		
4	A	2	ITA	EUR		
5	A	2	ITA	EUR		
6	A	3	ITA	EUR		
7	A	3	ITA	EUR		
8	A	3	ITA	EUR		239
9	A	4	ITA	EUR		
il problema e' nel caso in cui K2=2, infatti per quei record 
non riesco a stabilire quando fare la sostituzione con la tabella B.
non si riesc ad individuare il primo record della serie
secondo me andrebbe valorizzato anche il campo K5, in cui metti un 
progressivo e riesci a fare la chiave su k1-k2-k3-k4-k4.
allora tutto puo' funzionare modificando un attimo la query.
altrimenti devi scrivere del codice in PL/SQL.
saluti
