Newsgroup: it.comp.appl.access
Titolo: Inner join per sotituire valori ID

Ciao ragazzi,
ho un problema con una INNER JOIN che dovrebbe restituire una serie di
valori in base ad un id su di un'altra tabella. Esempio:
1) Dischi
    Titolo_id      Titolo  Batterista  Chitarrista  Pianista etc
         1                 aaa         3
5               2
         2                 bbb         2
1               3
2) Musicisti
    Mus_id     Musicista
        1           Mario
         2          Gianni
        3           Carlo
        4           Giovanni ..etc
Sto provando ad ottenere attraverso una INNER JOIN nidificata questo
risultato:
     Titolo  Batterista  Chitarrista  Pianista etc
       aaa         Carlo     Sandro     Gianni
       bbb         Gianni   Mario          Carlo
Dovrei fare in modo , ovviamente che compaia , per ogni musicista, al
posto del id numerico il nome in lettere
Non mi viene...mi sto perdendo tra gli " FROM Musicisti INNER JOIN
(dischi INNER JOIN musicisti, ON, ON "
Ovviamente dovrebbe restituirmi il rusultato anche laddove ci sia una
voce mancante ( un duo senza Batteria ad esempio)
Mi date una mano ? Ore di prove e non ne esco
Grazie a tutti
Ed


Scusate! Non ho tenuto conto della formattazione e l'esempio è venuto
da schifo...ma credi si capisca cosa intendevo
Ed

Ed
Non ho capito bene cosa vuoi ottenere, ma di norma se hai una tab con alcuni
dati e la metti in join con una seconda tab che contiene ALCUNI dati riferiti
alla prima non puoi usare l'INNER JOIN ma un OUTER JOIN (left o right dipende
dai casi...). Cito testuale : 
INNER JOIN = "includi SOLO le righe in cui i campi collegati da entrambe le
tabelle SONO UGUALI" 
-- 
Questo articolo e` stato inviato dal sito web 
http://www.nonsolonews.it


In pratica devo sostituire in un risultato, il codice del musicista
( mettiamo 2 immesso per ottimizzare le perdformance del db ) con il
valore vero , cioè (ad esempio Chitarrista al quale corrisponde il 2)
E' strano quello che dici tu, perchè questo codice mi restituisce la
stringa corretta , confrontanto due ID:
SELECT music.music_name AS Music, musictype.musictype_genre AS Genere,
musicisti.musicista_name AS musicista
FROM musicisti INNER JOIN (musictype INNER JOIN music ON
musictype.musictype_id = music.music_type) ON
musicisti.musicista_isguitar = music.music_guitar;
( va da se che esiste una tabella musictype dove ogni genere ha un
ID , nella tabella musicisti ogni musicista ha un ID e nella tabella
music, ogni nome di musicista è inserito ( per comodità e leggerezza
del db con codice numerico ( chitarrista (music_guitar) = 2 , che
corrisponde nella tabela musicisti all' ID di Mario)
e cioè :
Musica    Genere    Chitarrista
AAAAA    Pop          Mario
..ecco , io non riesco ad estrarre gli altri musicisti oltre
Mario...mi fermo al primo . Gli altri non riesco a gestirli e non
capisco il perchè .....
Grazie dell'intervento
Ed

Ed
Certo che i risultati restituiti sono corretti......solo che non sono quelli
che vuoi tu!!!
X es: 
Tabella Genere 
ID    VALORE
1     Rock
2     Blues
3     Funky
Tabella musicisti
ID    NOME          GENERE
1     Riccardo      3
2     Mario         2
3     Giovanni      1
4     Arturo        (vuoto)
(faccio finta che non ci sia integrit� referenziale)
se tu, per visualizzare tutto fai
SELECT musicisti.Nome, Genere.valore
FROM GENERE INNER JOIN Musicisti ON GENERE.Id = Musicisti.Id;
e Arturo nn lo vedrai mai.........xch� NON C'E' il valore nella tabella di
decodifica...
L'SQL corretto sarebbe
SELECT Musicisti.Nome, GENERE.valore
FROM GENERE RIGHT JOIN Musicisti ON GENERE.Id = Musicisti.Id;
cos� Arturo scappa fuori e si vede che non ha un genere....
Con l'INNER ottieni un risultato, con l'OUTER un altro......l'SQL � sempre
corretto ma dipende cosa devi fare tu.....
