3 messaggi dal 02 agosto 2001
Ciao a tutti, avrei un piccolo problema facendo il join di 2 tabelle di access.

A parte che access accetta solo il join del tipo:
SELECT * FROM tab1,tab2 WHERE tab1.id=tab2.id

mentre io preferisco scrivere
SELECT * FROM tab1 JOIN tab2 ON tab1.id=tab2.id

ma questo non è un problema, si tratta solo di notazioni...
Qualcuno sa dirmi come mai?

Il vero problema che ho è questo:
se nel risultato della query ci sono 2 colonne con lo stesso nome, in access si differenziano con tab1.id e tab2.id, mentre in asp non c'è modo di scrivere tab1.id e tab2.id, mi dice "item not found in collection"!!!
Ma come!!! se invece metto solo id, allora funziona, però posso usare solo uno dei 2 campi!!! Cioè l'altro come faccio a richiamarlo???

Qualcuno mi illumini, vi prego!!!
Ciao, Nicola.

Nicola La Notte
23 anni, Milano
3.122 messaggi dal 16 maggio 2002
Non è vero che Access accetta il join scritto in quel modo, infatti potresti anche scrivere
SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id=tab2.id

Comunque, per quello che riguarda la tua domanda, devi usare degli alias, come stabilito nel linguaggio SQL (definibili con la clausola AS).
Ad esempio

SELECT tab1.id AS id1, tab2.id AS id2, tab1.campo AS campo1
FROM tab1 INNER JOIN tab2 ON tab1.id=tab2.id

Gli alias che hai definito saranno poi visibili come i normali nomi dei campi.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
3 messaggi dal 02 agosto 2001
Ti ringrazio per la celere risposta.

Ok per gli alias, posso far così, però io avrei bisogno di fare una SELECT *, non posso scrivere tutti i campi della mia query uno per uno solo perchè devo usare gli alias, ho tantissimi campi...

Ma scusami, in access stesso, se fai una query i campi con lo stesso nome si differenziano con nomeTab.nomeCampo, perchè mai in asp questa cosa non funziona???

In Access il normale JOIN si scrive INNER JOIN?
Ottimo, io ho studiato SQL, ma questa differenza di notazione per access non la sapevo... grazie!

Ciao!

Nicola La Notte
23 anni, Milano
3.122 messaggi dal 16 maggio 2002
Che io sappia per definire alias in SQL si fa così (indipendentemente da ASP o Access).
Anche le operazioni di join naturale in SQL Standard si definiscono come INNER JOIN, non solo per Access.

The day Microsoft makes something that doesn't suck
is probably the day they start making vacuum cleaners.

Get caught!
Get caught again!
11.886 messaggi dal 09 febbraio 2002
Contributi

Ok per gli alias, posso far così, però io avrei bisogno di fare una SELECT *, non posso scrivere tutti i campi della mia query uno per uno solo perchè devo usare gli alias, ho tantissimi campi...


dovresti selezionare con la query solamente i campi che effettivamente utilizzerai per leggere i dati (il recorset così sarà ottimizzato).
Se comunque hai bisogno di leggere moooolti campi, puoi sempre scrivere:

SELECT *, tab1.id as id1, tab2.id as id2 FROM tab1 INNER JOIN....

così selezioni tutti i campi e in più definisci un alias per quei due che vanno in conflitto.
Presumo che gli alias da definire siano pochi... questo metodo ti può essere utile. Comunque mi sono chiesto anche io perchè dal recordset non si possa comunque far riferimento a un campo specificandone anche la tabella:
rs("tab1.id")

*Forse* access lo può fare perchè "dietro le quinte" fa riferimento ai record usando il loro indice:
rs(0)
mentre a te ti mostra un nome composto da tabella.campo per non farti farte confusione. ciao




Enjoy learning and just keep making
3 messaggi dal 02 agosto 2001
Grazie a tutti, probabilmente è come dici tu.

Cmq ho risolto cambiando il nome della campo di una delle 2 tabelle, anche se era meglio usare l'alias...

Ciao!

Nicola La Notte
23 anni, Milano

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.