Newsgroup: it.comp.lang.visual-basic
Titolo: [help] INNER JOIN

Diamine che casino questo SQL, ci sto perdendo il sonno, quando lancio la
seguente query di selezione mi viene segnalato un'errore di sintassi
(operatore mancante). Qualcuno mi aiuti PLEASE o mi metto a mordere la
tastiera!!!
SELECT [tblDocumenti].*,
[tblClienti].[sDenominazione] AS [sIntestatario],
[tblTipiDocumento].[sDescrizione] AS [sTipoDocumento],
[tblTipiPagamento].[sDescrizione] AS [sPagamento]
FROM [tblDocumenti]
INNER JOIN [tblClienti] ON [tblDocumenti].[IDIntestatario] =
[tblClienti].[ID],
INNER JOIN [tblTipiDocumento] ON [tblDocumenti].[IDTipoDocumento] =
[tblTipiDocumento].[ID],
INNER JOIN [tblTipiPagamento] ON [tblDocumenti].[IDPagamento] =
[tblTipiPagamento].[ID]
grazie

 tastiera!!!
Come saprai, ogni DB ha un SQL diverso, per cui se non dici a che DB di
attacchi, faccio molta fatica ad aiutarti.
Comunque, a me suonano strano le virgole prima di Inner Join.
Ciao
Alberto

 Comunque, a me suonano strano le virgole prima di Inner Join.
Stessa cosa anche senza virgole


[CUT]
forse la domanda ti risulta banale...
tu lanci la query in questione da un'applicazione VB?
se è così, dato che usi access, perchè non provi a copiare
la tua stringa ed incollarla nell'editor di query e provi
a vedere da lì cosa succede?
--
bye BlackMagic
ICQ: 85485468
Aiuta la ricerca sul cancro 
http://members.ud.com
Join
at:
http://members.ud.com/services/teams/team.htm?id=2E71C62A-8E67-48DB-B472-
BCA129B35412

SELECT [tblDocumenti].*,
                    [tblClienti].[sDenominazione] AS [sIntestatario],
                    [tblTipiDocumento].[sDescrizione] AS [sTipoDocumento],
                    [tblTipiPagamento].[sDescrizione] AS [sPagamento]
    FROM [tblDocumenti], [tblClienti], [tblTipiPagamento],
[tblTipiDocumento]
    WHERE [tblDocumenti].[IDIntestatario] = [tblClienti].[ID] AND
                   [tblDocumenti].[IDTipoDocumento] =
[tblTipiDocumento].[ID] AND
                   [tblDocumenti].[IDPagamento] = [tblTipiPagamento].[ID]
Prova cosi e fammi sapere cosa ti dice..

 grazie
Prova Cosģ
FROM (([tblDocumenti]
 INNER JOIN [tblClienti] ON [tblDocumenti].[IDIntestatario] =
 [tblClienti].[ID])
 INNER JOIN [tblTipiDocumento] ON [tblDocumenti].[IDTipoDocumento] =
 [tblTipiDocumento].[ID])
 INNER JOIN [tblTipiPagamento] ON [tblDocumenti].[IDPagamento] =
 [tblTipiPagamento].[ID]
cosa ho cambiato:
--->From((1°Join)2°Join)3°Join
in pratica ti ho tolto le virgole che (x concetto di sintassi)separano
infatti le usi per distinguere i campi da SELECT,ORDER ecc... e nn
uniscono (au contraire le parentesi comprendono)
Se poi posso darti un consiglio per crearti un stringa Sql corretta o che
puņ in ogni caso aiutarti nella sintassi costruiscila prima con access o
simildb che usi...
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 uniscono (au contraire le parentesi comprendono)
Purtroppo niente da fare nemmeno cosģ, "errore di sintassi nella
proposizione FROM"
goddamn'

 Stessa cosa anche senza virgole
Allora, le virgole non ci vogliono.
Se il DB č Access, servono le parentesi:
From ((TB1 INNER JOIN TB2 ON 
TB1.ID
=
TB2.ID
) INNER JOIN TB3 ON 
TB1.ID
=
TB3.ID
)
INNER JOIN .....
Ciao
Alberto
PS: Se hai Access installato sul PC, la cosa piů semplice (e che ti avrebbe
fatto risparmiare moltissimo tempo) era quella di creare la query col
wizard, poi visualizzare il codice SQL creato.

purtroppo in questo modo restituisce i record solo se i record esistono in
archivio, ad esempio se [tblClienti].[ID] è diverso da
[tblDocumenti].[IDIntestatario] il record non viene visualizzato


 a vedere da lě cosa succede?
stessi errori segnalati da VB

 Se il DB è Access, servono le parentesi:


 [tblTipiPagamento].[ID]
ma non era quello che avevo scritto io?


 puň in ogni caso aiutarti nella sintassi costruiscila prima con access o


 [tblDocumenti].[IDIntestatario] il record non viene visualizzato
Guarda che quello che ti hanno consigliato è esattamente un Inner Join, solo
che è scritto con la vecchia notazione, che oggi è sconsigliata perchè non
consente agli ottimizzatori di intervenire sull'esecuzione della query.
Il concetto di INNER JOIN è proprio: "Se gli ID non si incrociano, togli del
tutto il record".
Se vuoi che in mancanza del riferimento ti vengano inseriti campi nulli o
vuoti, devi usare LEFT o RIGHT OUTER JOIN.
Ciao
Alberto

 ma non era quello che avevo scritto io?
Esattamente identico.
Infatti credevo che non funzionasse neanche il mio consiglio, dopo aver
visto che 'non funzionava' il tuo.
Alberto

 Alberto
Misteri di SQL 
eh eh eh


SELECT [tblDocumenti].*,
                    [tblClienti].[sDenominazione] AS [sIntestatario],
                    [tblTipiDocumento].[sDescrizione] AS [sTipoDocumento],
                    [tblTipiPagamento].[sDescrizione] AS [sPagamento]
    FROM [tblDocumenti], [tblClienti], [tblTipiPagamento],
[tblTipiDocumento]
    WHERE [tblDocumenti].[IDIntestatario] = [tblClienti].[ID] AND
                   [tblDocumenti].[IDTipoDocumento] =
[tblTipiDocumento].[ID] AND
                   [tblDocumenti].[IDPagamento] = [tblTipiPagamento].[ID]
Prova cosi e fammi sapere cosa ti dice..

 vuoti, devi usare LEFT o RIGHT OUTER JOIN.
Infatti ho proprio questo problema, se un cliente è già stato cancellato
nell'anagrafica, il documento che dovrebbe contenere il suo ID non viene
visualizzato!
Ora vedo che pesci posso pigliare e vi faccio sapere!
Grazie ancora