Newsgroup: it.comp.appl.access
Titolo: Uso di INNER JOIN

Salve, e scusate l'object poco chiaro, che attirerà le ire di Biso
Vengo al dunque. Con questa query
SELECT SpeseI.Data, Clienti.Nome, Spese.Descrizione,
Spese.SpeseImponibili, Spese.Tipo
FROM Spese INNER JOIN Clienti ON Clienti.ID=Spese.IDCliente
WHERE (VOCI.Tipo="S") AND VOCI.Data>#31/12/2002#
ORDER BY VOCI.Data;
mi visualizzo la spesa e il cliente cui è addebitabile relative
all'anno in corso.
Senonché il campo IDCliente potrebbe essere pari a 0 (zero) perché la
spesa c'è ma non è addebitabile a nessuno
Allora la query me la dovrebbe dare lo stesso, ma senza alcun nome di
cliente (magari con un *********** o altra stringa, non importa)
Invece, e credo sia giusto e normale, la query semplicemente non
considera quei record in cui IDCliente sia = 0
Come devo fare per risolvere il problema?
Un altro titpo di query che non sia di unione credo, ma come si fa?
Grazie
Filippo
PS: La soluzione di creare un cliente Dummy, con ID zero di nome
"NESSUNO" o altro non è percorribile.

 considera quei record in cui IDCliente sia = 0
Ma scusa, la tabella VOCI come è collegata alle altre?!?!
La citi nei criteri e nell'ordinamento ma non è in join con clienti o
spese!!!
Antonio





wrote:

Oooops!
Scusa è un lapsus, nel postare ho ribattezzato la tabella VOCI in
spese perché mi pareva più leggibile, senonché poi con taglia e
incolla ho sbagliato a correggere: la quelry va letta così:
SELECT Spese.Data, Clienti.Nome, Spese.Descrizione,
Spese.SpeseImponibili, Spese.Tipo
FROM Spese INNER JOIN Clienti ON Clienti.ID=Spese.IDCliente
WHERE (Spese.Tipo="S") AND Spese.Data>#31/12/2002#
ORDER BY Spese.Data;
Scusate la cappella
Filippo

 ORDER BY Spese.Data;
Nel tuo caso ci deve essere un RIGHT JOIN.
Questo lo ottieni se nel QBE fai doppio clic sul join e poi scegli la voce
che dice (Tutti i record di spese e solo quelli in spese i cui campi
collegati sono uguali)
Poi ti fai dei campi calcolati per quanto riguarda i campi di spese fatti
cosě
Nz([Campo];"Valore se spese non esistenti")
Antonio

 ha scritto nel messaggio
news:ombg7vo53khcmvgg1...@4ax.com...

Per prima cosa la costante data la devi scrivere nel formato mm/dd/yyyy e
poi prova a usare un Left Join, insomma prova così:
SELECT Spese.Data, Clienti.Nome, Spese.Descrizione,
Spese.SpeseImponibili, Spese.Tipo
FROM Spese LEFT JOIN Clienti ON Clienti.ID=Spese.IDCliente
WHERE (Spese.Tipo="S") AND Spese.Data>#12/31/2002#
ORDER BY Spese.Data;
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://www.sitocomune.com
---------------------------------------------

 ORDER BY Spese.Data;
Ehem...
in questo caso con una INNER JOIN non ti da tutte le spese e solo i clienti
che joinano?!?
Dovrebbe essere il contrario no?
Dovrebbe essere una RIGHT oppure invertire l'ordine delle tabelle
Clienti INNER JOIN Spese
O sbaglio?
Antonio



Grazie, ho semplicemente sostituito INNER con LEFT e funziona come
volevo io. Tra l'altro non mi pare che la data debba essere scritta
mm/dd/yyyy, almeno come la scrivo io funziona e non mi dà alcun
messaggio di errore (sto parlando della struttura della Query,
Visualizza codice SQL e non di query scritta in VBA, dove forse la tua
dritta è necessaria).
Grazie
Filippo

#31/12/2002#
ma visto che hai postato il codice SQL della query, nella proposizione WHERE
(trattandosi di codice SQL) DEVI indicare la costante data nella forma
anglosassone ovvero:
Spese.Data>#12/31/2002#
quindi la mia precisazione è doverosa; per convincertene basta che
visualizzi il codice SQL dell tua query.


 ha scritto nel messaggio
news:BrYda.26327$7y3.8...@twister1.libero.it...

Io ho capito che IppoSoft voglia vedere TUTTI i record della tabella Spese e
solo i tecord della tabella Clienti che hanno un corrispondente record nella
tabella Spese, quindi:
FROM Spese LEFT JOIN Clienti
oppure se preferisci:
FROM Clienti RIGHT JOIN Spese
Comunque, dalla replica di IppoSoft, sembrerebbe che la mia soluzione
risolva il problema.


visualizzi il codice SQL dell tua query.
fatto, è come dico io, credo che il formato anglosassone si debba
usare soltanto nel codice VBA, se si usa DoCmd.RunSQL <StringaSQL>
allora in questo caso la stringa che contiene la data deve usare per
la data il  formato #mm/dd/yyyy#
O meglio, non lo so, sta di fatto che io uso il formato europeo nella
query e questa funziona, ecco tutto. Magari farò una prova via VBA per
vedere se ho ragione. 
Grazie di tutto
Ciao
Filippo

 ha scritto nel messaggio
news:bm3k7vo1sqqlftshf...@4ax.com...

Penso che tu stia facendo confusione tra quello che scrivi nella griglia di
struttura di una query e quello che dovresti scrivere nel codice SQL dell
stessa query.
In SQL, come in VBA, le costanti data vanno espresse nel formato
anglosassone, ovvero #mm/dd/yyyy# ; puoi star tranquillo che è così.
Ci sono però delle date che Access normalizza da solo e sonon tutte quelle
in cui il giorno è maggiore di 12: sia che tu scriva in SQL #31/12/03# che
tu scriva #12/31/03# Access capisce che ti riferisci al 31 dicembre 2003; ma
se in SQL scrivi #01/03/03#, Access fa riferimento al 3 gennaio 2003 e non
al primo marzo 2003.


al primo marzo 2003.
e' vero, ho fatto la prova e così......
EVVIVA, era ora, ce ne ho messo per capire ma poi ho capito. E infatti
è come dici tu.
Grazie di tutto, ne ho imparata una nuova.
Ciao
Filippo


Scusami: la prossima volta sarň piů sollecito ed esaustivo! :-)


Scusami: la prossima volta sarň piů sollecito ed esaustivo! :-)
Beh, adesso non esagerare, ci mancherebbe pure che devi preoccuparti
della mia incompetenza.
Filippo