77 messaggi dal 24 giugno 2005
Ciao a tutti,
mi sono imbattuta in un problema di questo tipo.
Ho 2 tabelle su un DB access: "inserzioni" e "fotografie".
A ciascuna inserzione possono ovviamente essere associate n. fotografie, per cui avremo:
IDfoto | nomefile | IDinserzione
---------------------------
1 | foto1.jpg | 12
2 | pippo.jpg | 12
3 | pluto.jpg | 14
ecc ecc...

Capita, probabilmente per un'errata scrittura dell'istruzione JOIN, che se un'inserzione ha, ad esempio, 2 fotografie, l'inserzione mi venga elencata 2 volte... quando io invece vorrei che l'inserzione venisse mostrata solo una volta... ecco il codice:

SELECT *, 
inserzioni.comune AS ins_comune, 
inserzioni.descriz AS ins_descriz, 
inserzioni.provincia AS ins_provincia, 
inserzioni.IDinserzione AS ins_IDinserzione, 
inserzionisti_a.IDinserzionista_a AS ins_IDinserzionista_a, 
inserzionisti_a.provincia AS ins_provincia 
FROM ((inserzioni LEFT OUTER JOIN inserzionisti_a ON inserzioni.IDinserzione = inserzionisti_a.IDinserzionista_a_txt) LEFT OUTER JOIN inserzionisti_b ON inserzioni.IDinserzione = inserzionisti_b.IDinserzionista_b_txt) LEFT OUTER JOIN fotografie ON inserzioni.IDinserzione_txt = fotografie.IDinserzione ORDER BY datapubblicazione DESC


N.B. ci sono un po' di alias poichè ho campi con lo stesso nome su più tabelle...

Ho anche provato, magari in modo sbagliato, ad utilizzare DISTINCT (SELECT DISTINCT *, ecc.ecc.) ma non ottengo il risultato sperato, nel senso che continuo a visualizzare la stessa inserzione moltiplicata x il numero di fotografie ad essa associata...

Mi aiutate per favore a capire cosa c'è che non va?
Vi ringrazio molto, ciao!
tizz
52 messaggi dal 24 febbraio 2008
la clausola Distinct serve a non ripetere nei risultati della Select quelli con lo stesso valore......l'interrogazione seleziona quindi tutti i record visualizzando però solo i nomi diversi.....
invece il LEFT OUTER JOIN funziona in questo modo: restituisce tute le righe della prima tabella, anche se nn ci sono corrispondenze nella seconda
--> SELECT campi FROM prima_tabella LEFT OUTER JOIN seconda_tabella ON prima_tabella.chiave_primaria=seconda_tabella.chiave_esterna


se hai problemi contattami......magari indicandomi precisamente i nomi delle tabelle e i vari campi....così risolviamo il problema


Ciao Domenico..
Modificato da gusic89 il 28 novembre 2008 13.55 -

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
(Albert Einstein)
77 messaggi dal 24 giugno 2005
Ciao Domenico,
e grazie per la tua disponibilità!

Ecco la struttura delle mie tabelle comprensive di alcuni dati esemplificativi:

Le tabelle sono 2, "offerte" e "foto_immobili"

OFFERTE
---------
IDofferta (contatore) | IDoffertatxt (campo di testo - copia carbone di IDofferta - per poter fare le join) | regione | provincia | ecc...
1 | 1 | lombardia | milano | ecc...
2 | 2 | piemonte | torino | ecc...
3 | 3 | toscana | firenze | ecc...
4 | 4 | lazio | roma | ecc...

FOTO_IMMOBILI
---------------
IDfoto | filename_p | IDofferta
1 | pippo.jpg | 2
2 | pluto.jpg | 3
3 | paperino.jpg | 3
4 | ciao.jpg | 4


Il mio obiettivo è ottenere a video la seguente tabella:

offerte.IDofferta | regione | provincia | ecc... | filename_p
--------------------------------------------------------
1 | lombardia | milano | ecc... | null
2 | piemonte | torino | ecc... | pippo.jpg
3 | toscana | firenze | ecc... | pluto.jpg <<<< record visualizzato 1 sola volta, non 1 volta per ciascuna foto!
4 | lazio | roma | ecc... | ciao.jpg

e non, come sto ottenendo ora:

offerte.IDofferta | regione | provincia | ecc... | filename_p
--------------------------------------------------------
1 | lombardia | milano | ecc... | null
2 | piemonte | torino | ecc... | pippo.jpg
3 | toscana | firenze | ecc... | pluto.jpg <<< record raddoppiato
3 | toscana | firenze | ecc... | paperino.jpg <<< record raddoppiato
4 | lazio | roma | ecc... | ciao.jpg


Spero tutto chiaro, diversamente fammi sapere!
Ancora grazie, ciaooo!
tizz
52 messaggi dal 24 febbraio 2008
allora tizz.....c'è un modo per ottenere cio che vuoi......cioè quello di utilizzare....la clausola first e group by....

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
(Albert Einstein)
52 messaggi dal 24 febbraio 2008
dimmi di preciso quale è il campo che vuoi si visualizzi una sola volta........così ti passo la stringa e vediamo....

Non hai veramente capito qualcosa fino a quando non sei in grado di spiegarlo a tua nonna.
(Albert Einstein)
77 messaggi dal 24 giugno 2005
credo di non aver capito...

praticamente vorrei tirare fuori tutti i campi (sono tanti) di tutti i record della tabella offerte (rispondendi a dei filtri WHERE che aggiungerei io in un secondo momento), purchè ciascun record "Offerta" venga visualizzato una sola volta, sia che vi siano foto associate (campo "foto_immobili.filename_p" -> foto.jpg) sia che non ve ne siano (campo "foto_immobili.filename_p" -> null), il tutto, credo io, con una join offerte.IDoffertatxt = foto_immobili.IDofferta.

non so se mi sono spiegata... comunque sia nella mia risposta al tuo primo messaggio sul thread ho riportato strutture esemplificative delle tabelle ed elenco dati che vorrei mostrare (dove vedi scritto "ecc..." si intende che vengono visualizzati svariati campi della tabella "offerte").
77 messaggi dal 24 giugno 2005
se preferisci, posso mandarti per e-mail un esempio di MDB Access popolato di dati di esempio... fammi sapere... nel caso, mando tutto all'e-mail riportata nel tuo profilo alla voce "msn"?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.