Newsgroup: it.comp.appl.access
Titolo: problemi con tabelle e query

 --------------------------------------------- 

Grazie!!
Ora è tutto più chiaro ! Perchè non hai parlato subito di distinta base  ?
Quella che segue non è una soluzione completa, ma dovrebbe aiutarti a porti nella giusta ottica per affrontare il
problema, oltre a darti qualche strumento da raffinare ed adattare ai tuoi scopi specifici.
Ho volutamente tralasciato la tabella dei job, perchè non è essenziale alla soluzione del problema della distinta base.
Faccio quindi riferimento alla situazione presentata nel tuo primo messaggio, dova la tabella job non era menzionata.
Io non vedo la necessità di usare tre tabelle: secondo me ne bastano due.
Prodotti
-------------------
ID_Prodotto
Descrizione
Distinta base
---------------------------
ID_Distinta
ID_Composto
ID_Componente
La tabella Prodotti dovrebbe contenere tutti i prodotti, siano essi semplici o composti.
Un esempio del contenuto potrebbe essere questo:
ID_Prodotto	Descrizione
----------------------------------------------------------------
1		Cruscotto
2		Tachimetro
3		Contagiri
4		Spia radiatore
5		Spia olio
6		Spia luci di posizione
7		Quadrante km/h
8		Lancetta tachimetro
9		Contachilometri
10		Quadrante ore
11		Lancetta minuti
12		Lancetta ore
13		Orologio
La tabella Distinta base raccoglie invece la descrizione di quali sono le associazioni fra i vari prodotti ed in
definitiva permette di capire se un prodotto è "elementare", oppure è composto da altri prodotti e quali.
Un esempio del contenuto potrebbe essere:
ID_Distinta	CD_Composto	CD_Componente
--------------------------------------------------------------------------------
1		13		11
2		13		10
3		13		12
4		1		2
5		1		3
6		1		4
7		1		5
8		1		6
9		1		7
10		1		13
11		2		7
12		2		8
13		2		9
A questo punto con le tre query riportate sotto, usate singolarmente oppure combinate fra loro, dovresti riuscire a
coprire tutte le tue esigenze:
Prodotti base (restituisce i soli prodotti "elementari")
SELECT Prodotti.ID_Prodotto, Prodotti.Descrizione
FROM Prodotti LEFT JOIN [Distinta base] ON Prodotti.ID_Prodotto = [Distinta base].CD_Composto
WHERE [Distinta base].ID_Distinta Is Null;
Sulle tabelle di esempio, la query restituisce i dati seguenti:
ID_Prodotto	Descrizione
--------------------------------------------------------------
3		Contagiri
4		Spia radiatore
5		Spia olio
6		Spia luci di posizione
7		Quadrante km/h
8		Lancetta tachimetro
9		Contachilometri
10		Quadrante ore
11		Lancetta minuti
12		Lancetta ore
Prodotti principali (restituisce i soli prodotti che non sono utilizzati come componenti di altri)
SELECT Prodotti.ID_Prodotto, Prodotti.Descrizione
FROM Prodotti LEFT JOIN [Distinta base] ON Prodotti.ID_Prodotto = [Distinta base].CD_Componente
WHERE [Distinta base].ID_Distinta Is Null;
Sulle tabelle di esempio, la query restituisce i dati seguenti:
ID_Prodotto	Descrizione
---------------------------------------------
1		Cruscotto
Semilavorati (restituisce i prodotti che sono composti da altri prodotti e che a loro volta sono usati come componenti)
SELECT DISTINCT Prodotti.ID_Prodotto, Prodotti.Descrizione
FROM ([Distinta base] INNER JOIN [Distinta base] AS [Distinta base_1] ON [Distinta base].CD_Composto = [Distinta
base_1].CD_Componente) LEFT JOIN Prodotti ON [Distinta base_1].CD_Componente = Prodotti.ID_Prodotto;
Sulle tabelle di esempio, la query restituisce i dati seguenti:
ID_Prodotto	Descrizione
---------------------------------------------
2		Tachimetro
13		Orologio
