Newsgroup: it.comp.appl.access
Titolo: problema su quary

Ho un mdb con diverse tabelle
6 tabelle sono relazionate e aprendone una qualsiasi si vedono a
cascata le successive.
Faccio una quary con le stesse 6 tabelle conservando le relazioni
Apro la quary e vedo solo una parte dei records delle 6 tabelle,
mancano gruppi di record.
Ci sarà un difetto, ma dove? sapete dirmi qualcosa? eventualmente
posso inviare il file mdb

news:680219e1-6970-4ac9-a624->906f50...@z9g2000yqi.googlegroups.com...

Ciao Tommaso,
probabilmente hai usato delle INNER JOIN nella query,  se vuoi vedere 
tutti i record anche quelli che non hanno voci corrispondeenti in 
qualcuna delle tabelle relazionate devi usare LEFT JOIN
-- 
Cinzia [Office Access MVP]
_______________________
 
www.riolab.org
http://accessdaziacin.spaces.live.com
---------------------------------------- 


Ciao Cinzia,
veramente si c'la INNER JOIN, ma vedi che la stringa SQL la defiisce
ACCESS io in effetti mi limito a costruire la struttura inserendo le
tabelle già relazionate.
Se sostituisco, come dici, la INNER JOIN con LEFT JOIN mi esce il
messaggio 'L aSelect include una parola riservata o un argomento
scritto in modo errato oppure la punteggiatura non è corretta.
ciao
Tommaso


 ----------------------------------------
OK Cinzia, va bene, una piccola correzione e poi tutto OK
Grazie e saluti,
Tommaso

 Ciao  Cinzia
Eseguendo creazione query delle tabelle relazionate ottengo:
SELECT *
FROM ((((Argomenti LEFT JOIN Capitoli ON Argomenti.ID_Argomento =
Capitoli.ID_Argomento) LEFT JOIN Articoli ON Capitoli.ID_Capitolo =
Articoli.ID_Capitolo) LEFT JOIN S_Articoli ON Articoli.ID_Articolo =
S_Articoli.ID_Articolo) LEFT JOIN S_S_Articoli ON
S_Articoli.ID_S_Articolo = S_S_Articoli.ID_S_Articolo) LEFT JOIN
S_S_S_Articoli ON S_S_Articoli.ID_S_S_Articolo =
S_S_S_Articoli.ID_S_S_Articolo;
Il LEFT l'ho messo io in sostituzione di INNER per l'errore di cui
sopra.
Ora vorrei tener conto di un'altra relazione tra le tabelle <Articoli>
già inclusa sopra e un'altra tabella <ArtLav> che io ho relazionato
separatamente con una query:
SELECT *
FROM ArtLav LEFT JOIN Articoli ON Articoli.ID_Articolo = val(left
(ArtLav.descrizione,4));
Non riesco ad unire in unica query le 2 query già viste
La creazione guidata mi da
SELECT *
FROM (((((Argomenti INNER JOIN Capitoli ON Argomenti.ID_Argomento =
Capitoli.ID_Argomento) INNER JOIN Articoli ON Capitoli.ID_Capitolo =
Articoli.ID_Capitolo) INNER JOIN ArtLav ON Articoli.ID_Articolo =
ArtLav.descrizione) INNER JOIN S_Articoli ON Articoli.ID_Articolo =
S_Articoli.ID_Articolo) INNER JOIN S_S_Articoli ON
S_Articoli.ID_S_Articolo = S_S_Articoli.ID_S_Articolo) INNER JOIN
S_S_S_Articoli ON S_S_Articoli.ID_S_S_Articolo =
S_S_S_Articoli.ID_S_S_Articolo
WHERE Articoli.ID_Articolo=val(left(ArtLav.descrizione,4));
ma all'apertura di dice
tipo non corrispondente nell'espressione
e se inserisco il LEFT mi da lo stesso messaggio
Puoi dirmi qualcosa?
Grazie

>>>>>>>>>>>>RISPOSTA>>>>>>>>>>>>
Ciao Tommaso,
se ho ben capito, prova :
SELECT *
FROM (((((Argomenti INNER JOIN Capitoli ON Argomenti.ID_Argomento =
Capitoli.ID_Argomento) INNER JOIN Articoli ON Capitoli.ID_Capitolo =
Articoli.ID_Capitolo) INNER JOIN ArtLav ON Articoli.ID_Articolo =
val(left(ArtLav.descrizione,4))) INNER JOIN S_Articoli ON 
Articoli.ID_Articolo =
S_Articoli.ID_Articolo) INNER JOIN S_S_Articoli ON
S_Articoli.ID_S_Articolo = S_S_Articoli.ID_S_Articolo) INNER JOIN
S_S_S_Articoli ON S_S_Articoli.ID_S_S_Articolo =
S_S_S_Articoli.ID_S_S_Articolo
WHERE Articoli.ID_Articolo=val(left(ArtLav.descrizione,4));
-- 


 WHERE Articoli.ID_Articolo=val(left(ArtLav.descrizione,4));
Non mi visualizza nulla anche se non da errore.
Nel caso prima non sia stato chiaro ripeto:
Ho una query
SELECT *
FROM ((((Argomenti LEFT JOIN Capitoli ON Argomenti.[ID_Argomento] =
Capitoli.[ID_Argomento]) LEFT JOIN Articoli ON Capitoli.[ID_Capitolo]
= Articoli.[ID_Capitolo]) LEFT JOIN S_Articoli ON Articoli.
[ID_Articolo] = S_Articoli.[ID_Articolo]) LEFT JOIN S_S_Articoli ON
S_Articoli.[ID_S_Articolo] = S_S_Articoli.[ID_S_Articolo]) LEFT JOIN
S_S_S_Articoli ON S_S_Articoli.[ID_S_S_Articolo] = S_S_S_Articoli.
[ID_S_S_Articolo]
ORDER BY Argomenti.ID_Argomento, Capitoli.ID_Capitolo,
Articoli.ID_Articolo, S_Articoli.ID_S_Articolo,
S_S_Articoli.ID_S_S_Articolo, S_S_S_Articoli.ID_S_S_S_Articolo;
che va perfettamente bene.
Ho un'altra query:
SELECT Articoli.ID_Articolo, ArtLav.descrizione
FROM Articoli INNER JOIN ArtLav ON Articoli.ID_Articolo = val(left
(ArtLav.descrizione,4));
che va perfettamente bene
Unendo le que query in un'unica altra query dovrei avere i risultati
della prima filtrati dalla seconda
invece ho errore:
<Tipo non corrispondente nell'espressione >
La SQL è:
SELECT QueryGenerale.Argomenti_ID_Argomento,
QueryGenerale.Descrizione_Argomento,
QueryGenerale.Capitoli_ID_Capitolo,
QueryGenerale.Descrizione_Capitolo,
QueryGenerale.Articoli_ID_Articolo,
QueryGenerale.Descrizione_Articolo, QueryGenerale.Articoli_P_U,
QueryGenerale.S_Articoli_ID_S_Articolo,
QueryGenerale.Descrizione_S_Articolo, QueryGenerale.S_Articoli_P_U,
QueryGenerale.S_S_Articoli_ID_S_S_Articolo,
QueryGenerale.Descrizione_S_S_Articolo,
QueryGenerale.S_S_Articoli_P_U, QueryGenerale.ID_S_S_S_Articolo,
QueryGenerale.Descrizione_S_S_S_Articolo,
QueryGenerale.S_S_S_Articoli_P_U
FROM QueryGenerale LEFT JOIN QueryArtLav ON QueryGenerale.
[Articoli_ID_Articolo] = QueryArtLav.[descrizione];
Ciao,
Tommaso

>>>>>>>>>>RISPOSTA>>>>>>>>>>>>
Ciao Tommaso,
l'errore è abbastanza significativo,  infatti tu nella JOIN tra le due 
query metti [Articoli_ID_Articolo] = QueryArtLav.[descrizione] ma 
supponendo che Articoli_ID_Articolo sia un campo numerico, non puoi 
paragonarlo a una descrizione che suppongo sia un campo di tipo 
testo...
devi perciò usare lo stesso trucco che hai   usato nella query2 cioè 
la clausola FROM della tua query finale diventerà:
FROM QueryGenerale LEFT JOIN QueryArtLav ON QueryGenerale.
[Articoli_ID_Articolo] = Val(Left(QueryArtLav.[descrizione];4))


 ha scritto nel messaggionews:f81ab70e-5585-4469...@q9g2000yqc.googlegroups.com...

Ho una visualizazzione di dati, da con disordine e senza il filtro
della query2
Ciao
Tommaso


OK. OK grazie.
Ora sto costruendo il report,
con la creazione guidata, ma i campi mi vengono tutti affiancati,
forse nella query dovrei indicare la colonna uguale per tutti gli
Indici, per tutte le Descrizioni e per tutti i P_U  ?
Grazie comunque e ciao
Tommaso

>>>>>>>>>>
Ciao Tommaso,
faccio fatica a seguirti, cosa vuol dire  che i campi ti vengono tutti 
affiancati, dipenderà dal tipo di report che hai scelto, non dalla 
query
Per fare in modo che vengano estratti solo i record filtrati dalla 
seconda query camnbia il LEFT JOIN con INNER JOIN



A questo inconveniente ho ovviato inserendo WHERE e ORDER BY.
Ora tutto va quasi bene.
Mi è comparso un piccolo difetto ma per ora va bene.
Ho difficoltà a strutturare bene il report perchè finora ho usato poco
DB e Report.
Se volessi farmi un grande favore di dare uno sguardo al mio DB e
magari un giudizio e qualche consiglio, potrei inviarti il file.
Ciao, Tommaso
