Newsgroup: it.comp.software.database
Titolo: Vista problematica ... collegamento e proliferazione tabelle

Ciao, devo realizzare una vista parecchio incasinata... io ho provato a
seguire la mia mia logica ma mi vengono duplicati alcuni records ... forse
per qualche join  sbagliata
tabOperazioni
IDOrdine - IDOperazione - Macchina
1 - 11 - M1
1 - 22 - M2
1 - 33 - M3
2 - 55 - M2
3 - 66 - M1
tabOrdini
IDOrdine - NrOrdine
1 - XXXXXX
2 - YYYYYY
3 - ZZZZZZ
TabComponenti
IDOrd - CodLotto - Articolo - Qt1 - Qt2
1  - AAA - Art01 - 10 - 5
1  - CCC - Art03 - 3 - 1
2  - null - Art02 - 15 - 3
3  - FFF - Art01 - 9 - 4
3  - HHH - Art04 - 12 - 3
tabElencoLotti
CodLotto (chiave) - Magazzino - Qt3
AAA - MM1 - 1
BBB - MM2 - 1
CCC - MM1 - 1
FFF - MM3 - 1
HHH - MM1 - 1
Quello che voglio ottenere č:
divido in due parti per capire meglio come arrivare alla vista finale:
prima parte....
incrocio con Macchina di tabOperazioni e  TabComponenti tramite IdOrd
Mac - NrOrd - Art - CodLot - Qt1 - Qt2
M1 - XXXXXX - Art01 - AAA - 10 - 5
M1 - XXXXXX - Art03 - CCC - 3 - 1
M2 - XXXXXX - Art01 - AAA - 10 - 5
M2 - XXXXXX - Art03 - CCC - 3 - 1
M3 - XXXXXX - Art01 - AAA - 10 - 5
M3 - XXXXXX - Art03 - CCC - 3 - 1
M2 - YYYYYY - Art02 - null - 15 - 3
M1 - ZZZZZZ - Art01 - FFF - 9 - 4
M1 - ZZZZZZ - Art04 - HHH - 12 - 3
seconda parte... trovo tutti gli elementi che hanno lotto corrispondente
nella tabella tabElencoLotti
collego gli elementi di tabElencoLotti che hanno lo stesso CodLotto dei
componenti
Mac - NrOrd - Art - CodLot - Qt1 - Qt2 - Magazzino - Qt3
M1 - XXXXXX - Art01 - AAA - 10 - 5 - MM1 - 1
M1 - XXXXXX - Art03 - CCC - 3 - 1 - MM1 - 1
M2 - XXXXXX - Art01 - AAA - 10 - 5 - MM1 - 1
M2 - XXXXXX - Art03 - CCC - 3 - 1 - MM1 - 1
M3 - XXXXXX - Art01 - AAA - 10 - 5 - MM1 - 1
M3 - XXXXXX - Art03 - CCC - 3 - 1 - MM1 - 1
M2 - YYYYYY - Art02 - null - 15 - 3 - - 
zzz viene duplicato perchč ci sono due CodLotto corrispondenti
M1 - ZZZZZZ - Art01 - FFF - 9 - 4  - MM3 - 1
M1 - ZZZZZZ - Art04 - HHH - 12 - 3 - MM1 - 1
M1 - ZZZZZZ - Art01 - FFF - 9 - 4  - MM3 - 1
M1 - ZZZZZZ - Art04 - HHH - 12 - 3 - MM1 - 1
io avevo provato a fare qualche cosa del tipo...
non guardate i nomi dei campi perchč purtroppo mi č impossibile riprodurre
esattamente la struttura del DB
select
 IDOperazione ,
 Macchina,
 NrOrdine,
 ....
from tabOperazioni OPE
 inner join tabOrdini OT ON OPE.IDOrdine = OT.IDOrdine
 inner join TabComponenti OC ON OPE.IDOrdine = OC.IDOrdine
 inner join
 (
  select
   CodLotto,
   Magazzino,
   sum(Quantita)
  from tabElencoLotti
  group by CodLotto,
   Magazzino
 ) TMP ON OC.CodLot = TMP.CodLotto

 records ... forse per qualche join  sbagliata
La view è l'ultimo dei problemi.
Ad una prima occhiata hai problemi di normalizzazione, gruppi ripetuti,
colonne null, tabelle con significato multiplo e/o sovrapposto,
dipendenze transitive, primary key scorrette.
Quello che devi sapere è che una tabella non è un mero elenco, le
righe non sono record, e le viste non sono tool per reportistica
in cui tentare di mettere tutto, ma tabelle esse stesse; tenti
inoltre di mimare una pseudo programmazione procedurale per forzare
il query analyzer a seguire un "percorso".
Il lavoro va iniziato dalla revisione del db.