Newsgroup: it.comp.appl.access
Titolo: problemone con query multipla su + tabelle

ho un problema da risolvere in una unica query.
devo prelevare dati da diverse tabelle e inserirli in una tabella nuova
"unificata"....
dalla tabella principale "products" devo prelevare tutti i dvd , e per
ogni dvd devo prelevare le info
aggiuntive che sono (non sempre) presenti su altre tabelle.
sono quasi riuscito , ma la tabella tracklist ha le informazioni che mi
servono su + record , e questo mi causa dei
record duplicati nella tabella finale .
cerco di spiegarmi con lo schema (sperando di riuscire a mantenere il
layout..):
table "products":
prod_id      artist              title              support
00001      myself          hello                  dvd
00002  someone          c ya                  dvd
00003  whonows      untitled                 cd
table "notes_one"
prod_id              notes
00001          with my sister
table "tracklist"
prod_id      tracks
00001      goodbye
00001      hallo
00001      cheers
00001      bla bla
00003      useless
attualmente riesco ad ottenere questo nella tabella nuova:
table "queryresult"
artist          title          notes_one
tracklist             prod_id
myself      hello      with my sister             goobye
00001
myself     hello      with my sister                 hallo
00001
myself      hello      with my sister             cheers
00001
myself      hello      with my sister             bla bla
00001
in pratica ottengo un nuovo record per ogni tracklist...
invece io vorrei raggruppare tutte le tracklist dello stesso prodotto
nel campo tracklist delle tabella nuova
table "DESIREDqueryresult"
artist              title              notes_one
tracklist                                   prod_id
myself          hello          with my sister
goobye,hallo,cheers.....                     00001
la query che sto utlizzando e' la seguente:
SELECT products.artist,
products.title,notes_one.notes,tracklist.tracks,products.prod_id
FROM ((products
LEFT JOIN notes_one ON notes_one.prod_id=products.prod_id)
LEFT JOIN tracklist ON tracklist.prod_id=products.prod_id)
WHERE products.support ='dvd'
ho provato con "group by", ma non ho ben capito dove metterlo...
continuo a ricevere errori...
e' possibile farlo con 1 sola query ?

 ha scritto nel messaggio
news:3E01FEAD.7101B22@non_spammate_sosimpresa.com...

In un modulo del tuo database registra questa funzione:
Public Function Tracce(Traccia As String) As String
Dim rst As DAO.Recordset
Dim Lista As String
Set rst = CurrentDb().OpenRecordset("tracklist")
rst.MoveFirst
Lista = ""
Do Until rst.EOF
    If rst![prod_id] = Traccia Then
        Lista = Lista & rst!tracks & ","
    End If
    rst.MoveNext
Loop
If Len(Lista) > 0 Then
    Tracce = Left(Lista, Len(Lista) - 1)
End If
Set rst = Nothing
End Function
Se, come sembra, vuoi prendere in considerazione solo i record che hanno
come il campo support uguale a "dvd", la query che ti restituisce il
risultato voluto ha il seguente codice SQL:
SELECT products.artist, products.title, notes_one.notes,
Tracce([products].[prod_id]) AS tracks, products.prod_id
FROM products LEFT JOIN notes_one ON products.prod_id = notes_one.prod_id
WHERE (((products.support)="dvd"))
ORDER BY products.prod_id;
Come avrai notato la funzione Tracce fa riferimento alla libreria Microsoft
DAO, quindi, se usi una versione di access successiva ad Access 97, aggiungi
ai riferimenti del tuo database quelli a tale libreria; se non lo farai
riceverai un errore da Access.
Dovrebbe funzionare, facci sapere.
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------