Newsgroup: it.comp.appl.access
Titolo: PROBLEMI CON TABELLE COLLEGATE E QUERY

Buonasera a tutti. Io ho un problema con una Query e chiederei il vostro 
aiuto per risolverlo.
Ho 3 tabelle relazionate tra loro e sono collegate come scatole cinesi: la 
prima tabella contiene la seconda che contiene la terza tramite delle 
relazioni.
Adesso non ricordo di preciso quali siano le relazioni settate ma 
semplificando i contenuti delle 3 tabelle vi dico che le 3 tabelle sono 
composte dai seguenti record:
TABELLA1    TABELLA2    TABELLA3
PRANZO  <-  PRIMO        <-    PASTA
                                            <-    SUGO
                 <-  SECONDO  <-    CARNE
CENA        <- PRIMO        <-    MINESTRA
                                            <-    FORMAGGIO
                   <-SECONDO  <-    INSALATA
                                            <-    FRUTTA
Vorrei che quando inserisco un controllo sulla tabella 2 ed inserisco 
"PRIMO" nella Query comparissero solo le seguenti combinazioni:
PRANZO    PRIMO    (campo blank)
CENA         PRIMO    (campo blank)
Invece adesso nella query compaiono
PRANZO    PRIMO    PASTA
PRANZO    PRIMO    SUGO
CENA         PRIMO    MINESTRA
CENA         PRIMO    FORMAGGIO
Questo perché voglio sommare i "PRIMI" che nel primo caso sono "2" (quello 
che vorrei ottenere) mentre nel secondo caso sono "4" (quello che 
attualmente mi compare nella Query).
Quali settaggi di relazioni o altro devo fare per ottenere il risultato 
desiderato?
Spero di essere stato chiaro e confido nel vostro aiuto. 

(...)
Premetto che a mio giudizio sei stato troppo vago ed approssimativo e questo costringe chi ti risponde a lavorare di
fantasia.
Ciò detto, immagino che tu abbia a che fare con qualcosa del tipo:
Tabella Pasti
--------------------
ID_Pasto
Descrizione
Tabella Portate
------------------------
ID_Portata
ID_Pasto
Descrizione
Tabella Componenti
-------------------------------
ID_Componente
ID_Portata
Descrizione
La query che ti serve dovrebbe essere la seguente:
SELECT Pasti.Descrizione, Portate.Descrizione FROM Pasti LEFT JOIN Portate ON Pasti.ID_Pasto=Portate.ID_Pasto WHERE
Portate.Descrizione='PRIMO'
Se ho immaginato bene, dovresti avere una maschera, che chiamerò frmPortate, che contiene un controllo (è una casella
combinata ? boh ...) che chiamerò cboPortata, associata al campo ID_Portata; in tal caso (ma sto lavorando di fantasia
!) dovrebbe bastare mettere come origine riga la query seguente:
SELECT Pasti.Descrizione, Portate.Descrizione FROM Pasti LEFT JOIN Portate ON Pasti.ID_Pasto=Portate.ID_Pasto WHERE
Portate.ID_Portata=me.cboPortata
HTH
Vincenzo Turturro
---------------------------------------------
il sito comune di it.comp.appl.access:
http://www.sitocomune.com/
---------------------------------------------
E quello di it.comp.as400
http://www.faq400.com/
---------------------------------------------

 ha scritto nel messaggio 
news:95usm2dpgl9lu3m4h...@4ax.com...


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
