Newsgroup: it.comp.lang.visual-basic
Titolo: Ancora Sql: Inner join

Un saluto a tutti
Ho due tabelle: tblA e tblB
tblA=(campo1,campo2,campo3,campo4)
Campo1 e' chiave per tblA
tblB=(campocont,campo2,campo1,campo3,campo4)
CampoCont e Campo2 sono le chiavi di tblB
le due tabelle sono in relazione 1 a molti
Dato un elemento della tblB devo visualizzare i campi di tblA
Se scrivo
fa.open "select tblA.campo1, tblA.campo2, tblA.campo3, tblA.campo4,
tblB.campo1 from tblA inner join tblB on tblA.campo1 = tblB.campo1
txbox(0).text=fa.fields("Campo1").value
.......
Ottengo il valore del primo record della  tblA, praticamente non
effettua la selezione e mi da sempre il valore del 1° record.
Dove sbaglio? Il caldo si prende gioco di me!!!!
ok grazie mille ai superstiti della settimana di ferragosto che mi
daranno una mano
ciao
e.

Se il comando SQL è corretto, è presumibile che ti restituisca più records.
if fa.eof=0 then
'        Ci sono records
    fa.movefirst    'Ti posizioni sul primo record
    Do
        if fa.eof then exit do    'Fine dei records
        'Esegui le istruzioni sul record corrente, tutto in fa.campi
        fa.movenext    'Passi al record seguente
    Loop
end if
---------
elio <not...@you.gk> wrote in message 9l3rgn$4ib$1...@nreadB.inwind.it...


 end if
Cmq provero' questo spezzone di codice
Ciao
e.

 > Se il comando SQL č corretto, č presumibile che ti restituisca piů


 Che ne dici di un caffè? :-)
vada per il caffe'.
Ho risolto, pero' voglio spiegaarmi meglio ugualmente (quando si e'  online
si scrive sempre in fretta).
Dunque dato un determinato valore immesso dall'utente e corrispondente ad un
campo della tabellaB debbo poter leggere i campi della tabellaA. La tabellaA
non contiene record ripetuti: cio' significa che debbo poter ottenere sempre
un unico record dalla selezione (ma non necessariamente il primo....potrebbe
essere il 140esimo, il 1560esimo....e cosi' via).
Se effettuo la selezione, quindi il risultato della select e' un record
qualsiasi dell'intera tabellaA.
Spero di essermi spiegato meglio (anche se ho risolto 20minuti fa)
ciao
e.

 > Che ne dici di un caffč? :-)


 Ciao.
esatto.....pero' non capisco perche' utilizzando "l'inner join" non
funzionava......piu' che altro volevo utilizzare l'inner join a scopo
esclusivamente didattico....per capirlo meglio....invece non funziona.
Se hai suggerimenti in merito...
ciao
e.

Non ti so rispondere, se non dicendo che l'informatica è certamente ...
un'opinione.
A parte tutto, quando ho cominciato a leggere di SQL, ho visto i vari Inner,
ma non li ho mai capiti (!), forse perchè mi appariva molto più chiara
(anche in termini di leggibilità) la Where e, per mia abitudine (o ottusità)
mi sono sempre ripromesso di non usare un'istruzione nuova/diversa se già ne
conosco una che funziona e la emula. Il vecchio Ford, a proposito delle auto
che produceva, diceva "se metti un pulsante in più sul cruscotto, il rischio
di guasti aumenta, quindi quel pulsante lo metto solo se è indispensabile",
Io (con Bill) ho adottato la stessa regola: "Dispongo di quanto serve per
ottenere quello che devo fare?". Se la risposta è affermativa, non mi sogno
nemmeno di cercare altro!
Non è forse didatticamente producente, ma ti garantisco che serve a
scottarsi di meno e io sono ormai come una pizza dimenticata nel forno.
elio <not...@you.gk> wrote in message 9l43ta$6lr$1...@nreadB.inwind.it...


Se ho capito bene si tratta del fatto che entrambi i campi si chiamano nello
stesso modo e se è quella la causa come credo lo verifichi chiamando i campi
in maniera diversa (in effetti andando poi entrambi a finire nel recordset
"fa" come fa vb a distinguere fra il primo e il secondo se si chiamano
uguale ?)
Ciao
elio <not...@you.gk> wrote in message 9l3rgn$4ib$1...@nreadB.inwind.it...


 wrote in message
ztjd7.6845$3Q4....@news2.tin.it...


 Ciao
Ciao,
non dovrebbe essere questo il motivo in quanto il campo e' preceduto dal "."
e dal "nome_tabella" quindi il campo e' definito in modo univoco. Inoltre
avevo utilizzato (non nel post inviato) gli alias per togliere ogni
dubbio.....ma non funziona ugualmente.
ciao
e.

Ciao Elio. Ho voluto approfondire (anch'io per capire) e mi pare che ci sia
un errore concettuale:
L'istruzione SQL:
select tblA.campo1, tblA.campo2, tblA.campo3, tblA.campo4, tblB.campo1 from
tblA inner join tblB on tblA.campo1 = tblB.campo1
concettualmente identica a questa:
select tblA.campo1, tblA.campo2, tblA.campo3, tblA.campo4, tblB.campo1 from
tblA,tblB WHERE tblA.campo1 = tblB.campo1
dice, semplicemente:
Seleziona i vari campi di tblA (e uno di tblB) dei records di tblA dove il
campo1 è uguale al campo1 di tblB
Ora, ipotizzando che ogni campo1 di tblB abbia un riferimento preciso (e
suppongo anche univoco) al relativo campo1 di tblA, allora ogni record di
tblB restituirà il relativo record di tblA.
Per esempio, supponiamo che tblB contenga i movimenti fatti dai nostri
clienti la cui anagrafica è riportata, una volta sola, in tblA. Ogni
movimento di tblB, per forza di cose, restituirà l'anagrafica del cliente in
tblA. Di conseguenza, se non cambiano le tabelle, otterrai sempre lo stesso
risultato e i record restituiti saranno "duplicati", cioè una certa
anagrafica sarà ripetuta tante volte quanti sono i movimenti che la citano
in tblB. Ciò sia con la Inner Join che con la WHERE.
Io direi:
Seleziona UNA SOLA VOLTA i vari campi di tblA (e uno di tblB) dei records di
tblA dove il campo1 è uguale al campo1 di tblB
Quindi:
select DISTINCT tblA.campo1, tblA.campo2, tblA.campo3, tblA.campo4,
tblB.campo1 from tblA inner join tblB on tblA.campo1 = tblB.campo1
concettualmente identica a questa:
select DISTINCT tblA.campo1, tblA.campo2, tblA.campo3, tblA.campo4,
tblB.campo1 from tblA,tblB WHERE tblA.campo1 = tblB.campo1
In questo modo ti verranno elencate, una volta sola, tutte le anagrafiche
(tblA) che hanno almeno un movimento (tblB)
--------------
elio <not...@you.gk> wrote in message 9l3rgn$4ib$1...@nreadB.inwind.it...


 scottarsi di meno e io sono ormai come una pizza dimenticata nel forno.
LOL :-)))
ciao,
nonsonostatoio

Ciao, NonSonoStatoIo.
La tua dissertazione mi ha lasciato a bocca aperta, l'ho stampata e me la
rileggerò con calma. Complimenti! Lo dico in assoluta onestà e sincerità.
Ciao e grazie.