Newsgroup: it.comp.lang.visual-basic
Titolo: ACCESS: outer join?

Lo so che la domanda e' un po' OT su it.comp.lang.visual-basic, ma mi serve
una risposta, questione di vita o di morte !
E' possibile (e come) fare degli OUTER JOIN (o FULL JOIN) tra due tabelle in
MS Access ?
Uso la versione 8.0 (Access 97) e ne' nell'help ne' altrove ho trovato
riferimenti agli outer join.
Vi prego, aiutatemi!
In alternativa, vi sarei grato se mi poteste dare suggerimenti su altri modi
di risolvere il mio problema:
Ho due tabelle (A e B) con la stessa struttura:
    ID,mese,quantita'
devo costruire una tabella (anch'essa con la stessa struttura), che
contenga:
    ID,mese (come raggruppamenti), quantita' = A.quantita' + B.quantita'
il tutto con SQL, se possibile!
Es:
         tabella A                                               tabella B
ID   mese   quantita'                             ID     mese     quantita'
1     7          100                                    1         7
50
2     6           75
     tabella Risultato
ID   mese  quantita
1       7          150 (100+50)
2       6          75
ringrazio in anticipo.
Potete anche rispondermi in privato, se preferite.
Roal Zanazzi
z...@iol.it

 il tutto con SQL, se possibile!
"SELECT Tabella1.* FROM Tabella1 INNER JOIN Tabella2 ON (Tabella1.Mese
<> Tabella2.Mese) AND (Tabella1.Id <> Tabella2.Id)"
Ricavo tutti i record della tabella1 che non sono correlati con la
tabella2
"SELECT Tabella1.Id, Tabella1.Mese,
[Tabella1]![Quantità]+[Tabella2]![Quantità] AS Espr1
FROM Tabella1 INNER JOIN Tabella2 ON (Tabella1.Id = Tabella2.Id) AND
(Tabella1.Mese = Tabella2.Mese)"
Ricavo un recordset contenente tutti i record della tabella1 e tabella2
che hanno in comune l'Id e il mese, e un campo Espr1 che contiene la
somma delle quantità dei record
Ciao Bruno


In Access esistono la RIGHT JOIN e la LEFT JOIN ( vedi sintassi INNER JOIN )
che fungono da OUTER JOIN.




Forse non mi sono spiegato.
Ho bisogno di un _FULL_ JOIN, non un LEFT o RIGHT.
La differenza e' che:
LEFT JOIN : prende tutti i record della tabella Left e (eventualmente)
lascia buchi (null) record della tabella Right.
RIGHT JOIN :  prende tutti i record della tabella Right e (eventualmente)
lascia buchi (null) record della tabella Left.
OUTER (o FULL) JOIN : prende tutti i record di entrambe le tabelle (sia Left
che Right), e eventualmente lascia buchi a Left E a Right.
L'ho spiegato in modo pessimo... bah.
Comunque ho reso l'idea?
Ma alla M$ sono cosi' sfigati da non riuscire ad implementare lo standard
SQL?
Roal Zanazzi
z...@iol.it


Va beh, questa e' una INNER JOIN normale... che, logicamente non basta per
quello che devo fare io.
ILLUMINAZIONE!!!!! (se lo scopo della tua mail era di farmi pensare, ci sei
riuscito!!)
Dato che un OUTER JOIN non e' altro che l'unione di:
1) INNER JOIN
2) record non correlati a LEFT
3) record non correlati a RIGHT
ho trovato la soluzione!!!!!!!
Beccatevi 'sta query!
'1) INNER JOIN
SELECT Tabella1.Id, Tabella1.Mese*, (Tabella1.Quantita + Tabella2.Quantita)
AS Quantita
FROM Tabella1 INNER JOIN Tabella2 ON (Tabella1.Id = Tabella2.Id) AND
(Tabella1.Mese = Tabella2.Mese)
UNION
'2) record non correlati a LEFT
SELECT Tabella1.*
FROM Tabella1 LEFT JOIN Tabella2 ON (Tabella1.Id = Tabella2.Id) AND
(Tabella1.Mese = Tabella2.Mese)
WHERE ((Tabella2.Id IS NULL) AND (Tabella2.Mese IS NULL))
UNION
'3) record non correlati a RIGHT
SELECT Tabella2.*
FROM Tabella1 RIGHT JOIN Tabella2 ON (Tabella1.Id = Tabella2.Id) AND
(Tabella1.Mese = Tabella2.Mese)
WHERE ((Tabella1.Id IS NULL) AND (Tabella1.Mese IS NULL))
;
(spero di averla scritta giusta, comunque a me sembra funzionare)
Con le UNION perdo la possibilita' di modificare i dati, ma era l'ultima
cosa che mi servisse, per cui, problema risolto!!!! (o no?)
Roal Zanazzi
z...@iol.it



 che fungono da OUTER JOIN.
 Questa č da FAQ.
Prego l'autore della presente di inserirla nella ormai famosa FAQ di Bruno
Gerosa.
Saluti


Non capisco...
O sono io che ormai ho perso per la strada tutti i neuroni che mi erano
stati affidati,
oppure siete voi che non capite cosa mi serve.
Se la RIGHT o LEFT JOIN vi sembrano uguali alla FULL JOIN... ragazzi, siamo
messi male!
Insomma, ditemi che in Access la FULL JOIN non e' implementata e facciamola
finita!
Si', tecnicamente la RIGHT JOIN e' un tipo di OUTER JOIN (solo a destra),
cosi' come la LEFT JOIN e' un tipo di OUTER JOIN (solo a sinistra)...
ma io stavo (e sto) parlando di FULL JOIN (che e' una OUTER JOIN _sia_ a
destra che a sinistra).
Vi prego, se c'e' qualcuno che conosce l'SQL, per favore faccia chiarezza.
grazie.
Roal Zanazzi
z...@iol.it

...
: InterBusiness ha scritto
<snip>
: OUTER (o FULL) JOIN : prende tutti i record di entrambe le tabelle (sia
Left
: che Right), e eventualmente lascia buchi a Left E a Right.
<snip>


Soluzione corretta... ma troppo tardi! :-)
Ci sono arrivato da solo (vedi messaggio di 5 giorni fa).
Grazie comunque!
--
Roal Zanazzi
z...@iol.it