Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

SQL full outer join ?

16 views
Skip to first unread message

Ammammata

unread,
Jun 28, 2019, 8:19:50 AM6/28/19
to
di solito faccio riferimento a questo schema:
<https://www.codeproject.com/KB/database/Visual_SQL_Joins/Visual_SQL_JOINS_
orig.jpg>

https://is.gd/kfOcX8 forse č meglio

ora ho tre tabelle a b c dove i record sono identificati univocamente da
una coppia di campi: Distr e Manuf
la maggior parte dei record sono comuni a tutte e tre, ma ogni tabella ha
sia qualche buco (record mancante) che qualcosa in piů rispetto alle altre
due

i sette casi possibili:

a b c
1 1 1
2 2
3 3
4 4
5
6
7

ho provato a scrivere una cosa tipo questa:

select *
from a
full outer join b on b.Distr = a.Distr and b.Manuf = a.Manuf
full outer join c on c.Distr = a.Distr and c.Manuf = a.Manuf

ma ottengo un guazzabuglio finale con diversi record dove i due campi
chiave diventano NULL

il sospetto/quasi certezza (guardando i dati) č che il full outer sia
valido tra "a e b" e tra "a e c" (come dichiatato) ma che resti fuori
quello tra "b e c" (e da qui i record null)

la domanda: č corretto usare full outer join come lo ho scritto io?

oppure devo scrivermi tre select union e poi ri-raggruppare i record
sommando i campi?

oppure altro ancora?

grazie

--
/-\ /\/\ /\/\ /-\ /\/\ /\/\ /-\ T /-\
-=- -=- -=- -=- -=- -=- -=- -=- - -=-
>>>>> http://www.bb2002.it :) <<<<<
........... [ al lavoro ] ...........

Ammammata

unread,
Jun 28, 2019, 8:49:19 AM6/28/19
to
Il giorno Fri 28 Jun 2019 02:19:48p, *Ammammata* ha inviato su
microsoft.public.it.sql il messaggio
news:XnsAA7C91CA01456am...@148.251.67.112. Vediamo cosa ha
scritto:

> oppure devo scrivermi tre select union e poi ri-raggruppare i record
> sommando i campi?
>
>

anticipo una risposta: con questo metodo ottengo i dati corretti

Ammammata

unread,
Jun 28, 2019, 8:53:28 AM6/28/19
to
Il giorno Fri 28 Jun 2019 02:49:18p, *Ammammata* ha inviato su
microsoft.public.it.sql il messaggio
news:XnsAA7C96CA01E2Fam...@148.251.67.112. Vediamo cosa ha
scritto:

> con questo metodo ottengo i dati corretti
>

-- step 7b: print data method 2

select
*
into #tmp7
from
(

select
a.Distr
, a.Manuf
, isnull(a.P3, 0) as P3
, isnull(a.P2, 0) as P2
, isnull(a.P1, 0) as P1
, 0 as SB
, 0 as OB
, isnull(a.C0, 0) as C0
, 0 as TBD
, isnull(a.C0, 0) as T0
, 0 as N1


from #tmp1 a

union all

select
b.Distr
, b.Manuf
, 0 as P3
, 0 as P2
, 0 as P1
, isnull(b.FinBudget, 0) as SB
, isnull(b.OnGBudget, 0) as OB
, 0 as C0
, 0 as TBD
, 0 as T0
, 0 as N1


from #tmp4 b

union all

select
c.Distr
, c.Manuf
, 0 as P3
, 0 as P2
, 0 as P1
, 0 as SB
, 0 as OB
, 0 as C0
, isnull(c.TBD, 0) as TBD
, isnull(c.tbd, 0) as T0
, isnull(c.N1, 0) as N1


from #tmp6 c

) tmp7

select
Distr
, Manuf
, sum(P3) as P3
, sum(P2) as P2
, sum(P1) as P1
, sum(SB) as SB
, sum(OB) as OB
, sum(C0) as C0
, sum(TBD) as TBD
, sum(T0) as T0
, sum(N1) as N1

from #tmp7

group by Distr, Manuf
order by Distr, Manuf
0 new messages