Newsgroup: it.comp.appl.access
Titolo: Query su tabelle in relazione

In sintesi
Da 2 Tabelle, di cui ognuna ha una propria sottotabella, per ogni record
in TAB2 devo avere i  valori di TAB1 dove TAB2s=TAB1s
Con
TAB1 (master)  relazione 1 a molti con TAB1s  (secondario)
             TAB1    cAutore    (chiave primaria)
             TAB1s  cAutore  e  cArgomentoAutori    (2 campi)
TAB2 (master) relazione 1 a molti con TAB2s  (secondario)
             TAB2    cLibro    (chiave primaria)
             TAB2s  cLibro  e   cArgomentoLibri      (2 campi)
Es. con valori:
TAB1         relaz. 1 a molti con    TAB1s
cAutore                 cArgomentoAutori (di TAB1s)
Pippo          --- >   Economia, Lavoro, Salute
Pluto           --- >   Salute, Sport
Paperino     --- >   Lavoro, Hobby, Motori, Salute
TAB2         relaz. 1 a molti con    TAB2s
cLibro                   cArgomentoLibri (di TAB2s)
LibroX          --- >    Hobby
LibroY          --- >    Lavoro, Sport, Educazione
LibroZ           --- >    Salute, Economia, Cinema
Devo avere una query che per ogni Libro di Tab2
e per ogni suo argomento (in TAB2s quindi) mi dia
i vari autori (TAB1):
LibroX --- >  Hobby       --- >  Paperino
LibroY --- >  Lavoro      --- >  Pippo, Paperino,
             --- >  Sport         --- >  Pluto
             --- > Educazione   nessun autore
LibroZ --- > Salute --- > Pippo, Pluto, Paperino
            --- > Economia --- > Pippo
            --- > Cinema --- > nessun autore
Ulteriori chiarimenti sulle 2 tabelle e
i valori dei vari campi:
------------
TAB1                (TabAutori)
cAutore:            (campoAutore )  chiave primaria
Pippo
Pluto
Paperino
-------------
TAB1s è secondaria di TAB1 ed ha 2 campi:
cAutore e cArgomentoAutore,
dove per ogni autore di TAB1, posso avere vari argomenti es.:
Pippo      --- > ha come argomenti     Economia, Lavoro, Salute
Pluto       --- >  ha come argomenti    Salute, Sport
Paperino  --- > ha come argomenti    Lavoro, Hobby, Motori, Salute
--------------
Quindi TAB1 in relazione 1 a molti con TAB1S tramite il cAutore
TAB1     master
TAB1s   secondario
tramite il cAutore, che in TAB1 è la chiave primaria.
--------------
--------------
TAB2                (TabLibri)
cLibro:             (campoLibro )  chiave primaria
LibroX
LibroY
LibroZ
-------------
TAB2s è secondaria di TAB2 ed ha 2 campi:
cLibro e cArgomentoLibro,
dove per ogni libro di TAB2, posso avere vari argomenti es.:
LibroX       --- > ha come argomenti   Hobby
LibroY      --- >  ha come argomenti   Lavoro, Sport, Educazione
LibroZ       --- > ha come argomenti    Salute, Economia, Cinema
--------------
Quindi TAB2 in relazione 1 a molti con TAB2s tramite il cLibro
TAB2     master
TAB2s   secondario
tramite il cLibro, che in TAB2 è la chiave primaria.
----------
----------
Spero di essere stato chiaro
Saluto il NG

 [cut] probabilmente non serviva
Per quanto mi riguarda ho qualche dubbio sulla validita' della struttura
delle tabelle. Non c'e' relazione fra libro e Autore. Sembra che la
chiave di relazione sia l'argomento libro, ma cosi' non e', poiche', lo
stesso argomento, puo' essere su piu' libri o su piu' autori. Quindi,
ammettendo che si parta da libri e l'argomento sia Musica, se provo a
cercare musica su lato autori, ottengo una serie di autori che non anno
nulla a che vedere con il libro scelto, viceversa se parto dal lato
libro.
Personalmente avrei fatto le seguenti tabelle:
Libro
Autore
Argomento
LibroMonografia
LibroMonografiaArgomento
LibroMonografiaAutore
a.cara
P.S. e con le collane o le opere multivolume come ti metti?

n.b. non devo avere una relazione tra libro e autore
devo solo fare una ricerca in base agli argomenti.
quindi per un argomento posso avere anche pi?
autori
in effetti avrei dovuto chiamare cArgomentoAutori e
cArgomentoLibri solo con cArgomento
Thank you


se non ti serve  il collegamento a libri allora la query e'
select * from tab1s order by cArgomentoAutori
ripeto non hai relazione fra libri e autori (per relazione intendo
relazione logica e non la relazione fisica di access)
se poi nella tua richiesta intendevi (e questo perche' gli archivi sono
evidentemente "sporchi") :
1) Ricercare l'argomento su libri 
2) per ogni argomento trovato cercare gli autori che hanno trattato
l'argomento
 allora:
select argomento, autori from argautori where argomento in (select
distinct argomento from argLibri) order by argomento
questa dovrebbe andare
-- 
Alessandro Cara

In effetti la dicitura dei campi può ingannare dal punto di vista logico
soprattutto per il fatto che gli autori da me considerati non sono gli
autori
dei libri ma gli autori degli argomenti trattati all'interno di ciascun
libro
(n.b. io ho usato tali diciture per semplificare la spiegazione, in realtà
per libri utilizzo delle dispense con raccolta di varie copie di vari
argomenti trattati da vari libri etc..)
Comunque per risemplificare ancora il tutto (i suggerimenti che mi hai
postato
non vanno bene, però mi sono serviti per risolvere una primo pezzo di
codice)
 cerco di fare una ulteriore semplificazione :
Dalle 2 Tabelle: Tab1s  e Tab2s devo avere una query che
per ogni cLib e per ogni suo cArg mi da tutti i corrispondenti
cAut
TAB1s                       |      TAB2s
-------------------------------------------------------------
cAut       cArg           |  cLib      cArg
A           Economia    |    X         Hobby
A           Lavoro        |    Y         Lavoro
A           Salute          |    Y         Sport
B           Salute          |    Y         Educazione
B           Sport           |    Z         Salute
C           Lavoro        |    Z         Economia
C           Hobby        |     Z         Cinema
C           Motori        |
C           Salute         |
-------------------------------------------------------------
Query che devo  ottenere:
cLib    cArg                cAut
X         Hobby              C
Y         Lavoro              A
Y         Lavoro              C
Y         Sport                 B
Y        Educazione        niente
Z         Salute                A
Z         Salute                B
Z         Salute                C
Z         Economia          A
Z         Cinema              niente
Con il seguente codice riesco ad avere solo i primi 2campi
della query ma non riesco ad associare anche il corrispondente
3 campo
SELECT Tab2s.cLib, Tab2s.cArg
FROM Tab2s
WHERE cArg in (select cArg from Tab1s)
ORDER BY cLib, cArg;
cioè ho ottenuto:
cLib    cArg
X         Hobby
Y         Lavoro
Y         Sport
Z         Salute
Z         Economia
Grazie per le indicazioni inviatomi nei post precedenti,
spero di essere stato ulteriormente chiaro questa volta. Ciao
Provo anche a ripostare quest'ultima parte come:"Query tra 2 tabelle"
Noto che sul ng i post invecchiano molto velocemente!!!!