Newsgroup: it.comp.appl.access
Titolo: Oracle, SQL standard: non c'è il join...

Ciao a tutti.
Qualcuno di voi magari si ricorderà la disavventura con la clausola
TODATE per confrontare date Access con date Oracle, e fin qui tutto
quasi normale.
Oggi provo a fare un join (tramite VBA in SQL) su 2 tabelle Oracle e non
c'è verso di farlo funzionare.
Allora collego le due tabelle nel database e creo una query "visuale"
con Access. Tutto Ok. Copio e incollo il codice risultante (molto simile
al mio) lo porto in VBA: nulla.
Siccome l'altra volta ha dato buoni frutti, decido di scomodare di nuovo
i capoccioni Oracle.
Risposta: la mia query non è SQL standard (???) perciò non funziona. Me
ne danno un'altra, la provo ed effettivamente funziona.
Ve le sottopongo
1) quella che non funzia
SELECT tab1.campo1, tab2.campo2 FROM tab1 INNER JOIN tab2 ON tab1.id1 =
tab2.id1 WHERE tab2.campo3 = 'CIAO';
2) quella che funzia
SELECT tab1.campo1, tab2.campo2 FROM tab1, tab2 WHERE tab1.id1 =
tab2.id1 AND tab2.campo3 = 'CIAO'
Ne sapete niente?
Bye
giaconet

 ha scritto nel messaggio
news:anc8jr$clk59$1...@ID-71483.news.dfncis.de...

Ciao giaconet, ti riporto le definizioni di Join dal manuale di Sql 2000,
penso che oracle sia rimasto indietro come standard SQL infatti riporta come
obsolete le join specificate nella claulola Where con il metoto indicato dai
cappoccioni Oracle.
Ciao Giorgio.
Da BOL:
--------------------------------------
Utilizzo di inner join
In un inner join i valori delle colonne unite in join vengono confrontati
tramite un operatore di confronto.
In base allo standard SQL-92 è possibile specificare inner join nella
clausola FROM o WHERE. Si tratta dell'unico tipo di join supportato da
SQL-92 nella clausola WHERE. Gli inner join specificati nella clausola WHERE
vengono considerati obsoleti.
La query Transact-SQL seguente è un esempio di inner join:
USE pubs
SELECT *
FROM authors AS a INNER JOIN publishers AS p
   ON a.city = p.city
ORDER BY a.au_lname DESC
--------------------------------------
Join Transact-SQL
Nelle versioni precedenti di Microsoft® SQL Server 2000 le condizioni
relative a left e right outer join venivano specificate nella clausola WHERE
tramite gli operatori *= e =*. In alcuni casi, questa sintassi produce query
ambigue intrepretabili in modi diversi. Gli outer join conformi a SQL-92
vengono specificati nella clausola FROM e non creano alcuna ambiguità.
Poiché la sintassi di SQL-92 è più precisa, in questa versione non vengono
fornite informazioni dettagliate sull'utilizzo della precedente sintassi
degli outer join Transact-SQL nella clausola WHERE, in quanto nelle future
versioni di SQL Server potrebbe non essere più supportata. Tutte le
istruzioni che utilizzano outer join Transact-SQL devono essere modificate
in base alla sintassi SQL-92.
Lo standard SQL-92 supporta la specifica di inner join nella clausola FROM o
WHERE. Gli inner join specificati nella clausola WHERE non presentano gli
stessi problemi di ambiguità della sintassi degli outer join Transact-SQL.

 non c'è verso di farlo funzionare.
[CUT]
La sintassi di dell'SQL di Oracle non prevede l'utilizzo della parola chiave
Join
per effettuare la stessa operazione dovresti inserire le condizione di join
nella clausola WHERE.
Es:
SELECT * FROM Tab1, Tab2 WHERE Tab1.Campo1 = Tab2.Campo2
in questo modo dovrebbe funzionare.
Antonio.

giaconet schrieb:

Come già ha citato Giorgio prx dal BOL la tua versione con il
JOIN è perfettamente valido definito nel standard SQL-92.
Invece Oracle fino alla versione 8.i riguardo i join ha preferito
di stare alla vecchia versione del standard SQL-86 dove si fa
un join solo nella clausola WHERE.
Nella nuova versione Oracle 9.i finalmente è implementato
il JOIN del standard SQL-92 e SQL-99.
Vedi p.e. 
http://technet.oracle.com/products/oracle9i/daily/jan14.html
--
HTH
Karl
*********
Access-FAQ (tedesco): 
http://www.donkarl.com