Newsgroup: it.comp.lang.visual-basic
Titolo: su SQL & ORACLE

Carissimi,
    avete qualche dritta da darmi sul perché questa Query funziona
correttamente su Access ma NON su ORACLE7 ?
SELECT Difetti.*, DescrDifetti.*
FROM DescrDifetti
INNER JOIN Difetti ON DescrDifetti.CodDifetto = Difetti.Coddifetto
Saluti e Ringraziamenti
Renato

>INNER JOIN Difetti ON DescrDifetti.CodDifetto = Difetti.Coddifetto
Cosa vuol dire non funziona? Non ritorna nessun record?
Prova a girare il join (Difetti join DescrDifetti).
Antonio

Da Oracle SQL*Plus
Error at line 3
ORA-00933: SQL command not properly ended
Grazie
Ciao Renato
Antonio Donatiello <ant...@REMOVETHISgeminisoft.com> wrote in message
83nf3l$dps$1...@fe1.cs.interbusiness.it...


semplicemente perchč in Oracle la sintassi č diversa: infatti non esiste la
INNER JOIN perchč, essendo fortunatamente Oracle un database relazione
serio, si basa sullo standard ANSI SQL 92, a differenza dai prodotti MS
(Access e SQL Server)...
devi cambiare la tua query in questo modo:
 SELECT Difetti.*, DescrDifetti.*
FROM DescrDifetti, Difetti
WHERE DescrDifetti.CodDifetto = Difetti.Coddifetto
ciao,
RiK

 INNER JOIN Difetti ON DescrDifetti.CodDifetto = Difetti.Coddifetto
E' sbagliata la sintassi, non esiste l'espressione "INNER JOIN" in SQL
Oracle ...
Per risolvere il tuo problema devi usare l'OUTER JOIN (il concetto e' lo
stesso della INNER di Access) "utilizzando l'operatore '(+)' nella
condizione di join dalla parte dell'attributo della tavola che fornisce meno
valori di qunti non ne siano presenti nell'attributo dell'altra tavola"
(tratto dal manuale di ORACLE: SQL e PS/SQL)
Dovresti scrivere la tua query cosi':
SELECT Difetti.*, DescrDifetti.*
FROM DescrDifetti
WHERE DescrDifetti.CodDifetto (+)  = Difetti.Coddifetto
O forse "... WHERE DescrDifetti.CodDifetto = Difetti.Coddifetto (+)",  mi
confondo sempre ;-)))
Tra l'altro, per quanto ne so, la INNER JOIN di Access e' una libera
interpretazione della Micro$oft e non risponde allo standard SQL.

>ORA-00933: SQL command not properly ended
Come suggerito da altri (io non ho mai usato Oracle) e' probabile Oracle 7 non supporti il JOIN (orrore!) e quindi puoi usare la sintassi del tipo
select a.*, b.* from a, b where a.campo = b.campo
Antonio

>WHERE DescrDifetti.CodDifetto = Difetti.Coddifetto
Questo e' il vecchio modo di fare le join.
Come faresti una LEFT JOIN (tutti i record di Difetti anche se non c'e' la descrizione in DescrDiffet - i campi relativi vengono restituiti a NULL)? Prova a scriverla senza estensioni Oracle e ti accorgerai del perche' della JOIN.
Antonio

 select a.*, b.* from a, b where a.campo = b.campo
ovvero, quanto ho detto anche io, non mi sembra che Renato chiedesse
specificatamente una LEFT JOIN...
quindi cosa chiedi a fare "Come faresti una LEFT JOIN"????!!
per quanto riguarda Microsoft, se avessi lavorato almeno per un po' con
Oracle, non potresti negare che è sicuramente meglio di SQL Server...
RiK


Lo standard SQL prevede:
JOIN (= INNER JOIN di M$)
LEFT|RIGHT JOIN
FULL JOIN (non implementato in Access)
Roal Zanazzi


Considerando che la versione 7.0 non e' la piu' recente, immagino che sia
supportata la vecchia sintassi per le join, cioe' quella da te proposta:
select a.*, b.* from a, b where a.campo = b.campo
Sparare a zero su Oracle (stiamo parlando di uno dei piu' potenti RDBMS sul
mercato) mi sembra un po' eccessivo.
Inoltre mi pare (non ne sono sicuro) che anche le vecchie versioni di M$
SQL-Server (forse anche la 6.5) supportano solo la vecchia sintassi, e non
la sintassi JOIN.
Roal Zanazzi

E Oracle 7 non lo supporta? Mi sembra strano, ma se cosi' fosse sarebbe in
errore.
Perche? Supporta comunque (come le vecchie versioni di SQL-Server,
d'altronde) la sintassi considerata "vecchia". Essendo la 7 una vecchia
versione di Oracle, non vedo dove stia l'errore.
Roal Zanazzi

>Oracle, non potresti negare che č sicuramente meglio di SQL Server...
Non sto dicendo che Sql Server sia meglio di Oracle. Ho semplicemente voluto farti notare che hai criticato Microsoft ingiustamente (questa volta). Anzi, se Oracle 7 non supporta JOIN dovresti allo stesso modo criticare Oracle!
Tu hai usato Sql Server?
Su uno degli ultimi PC professionale c'e' un test sui vari database e la palma va "guarda caso" a Sql Server tenendo conto del fatto che ad un costo decisamente minore ti da ottime prestazioni ed in piu' fa anche da OLAP server e Index Server (ricerca full text).
Antonio



>versione di Oracle, non vedo dove stia l'errore.
Forse mi sbaglio ma non considero Oracle 7 tanto vecchia dato che lo standard e' del 92 (credo).
Inoltre se consideri che Sql Server e Access 1.0 supportavano gia' JOIN...
Antonio

>la sintassi JOIN.
Sql Server 6.5 supportava JOIN.
Antonio

 >FROM Difetti, DescrDifetti



Non e' una nomenclatura sbagliata, ma bisogna stare attenti a non fare
confusione tra "outer join" come concetto di join "esterna" (quindi sia
left, che right che full join sono outer joins)
e "outer join" come sintassi equivalente (anche se non standard SQL) di FULL
JOIN.
In entrambi i casi comunque, "outer join" (sia left, right o full) e' ben
diverso da "inner join".
Roal Zanazzi


Sorry, mi sono dimenticato la "faccina", non vorrei essere sembrato
scortese.
Roal Zanazzi

>a qualche fantasmagorico standard inventato da Microsoft ;-)
A dire il vero la discussione era iniziata sulla domanda se JOIN era standard e io ho detto che secondo me Access e Sql Server lo erano da questo punto di vista. Non conosco cosi' bene lo standard per dire se sono conformi. Sono certo che Access non lo sia, un po' meno su Sql Server.
A proposito di Microsoft ed il fatto che "non se ne puo' parlare bene" mi spieghi perche' usi Outllook Express? (provocazione esplicita :-))
Antonio

...

In ufficio: perche' abbiamo un'installazione standard che prevede IE4 (e
quindi OE4).
A casa: (ancora per poco, spero) perche' con Win98 e' impossibile
disinstallare completamente IE4 (anti-trust, aiutaci tu!), e non avendo
voglia di occupare inutilmente altro spazio su disco, lascio quello e non
installo altri software (es. netscape o free-agent per i newsgroups).
Soddisfatto? :-)
Roal Zanazzi

>Soddisfatto? :-)
A casa non dovresti avere Windows 98 ma Linux o il Mac (dato che odi Microsoft).
Con Windows 98 da pannello di controllo e' possibile disinstallare IE4 o OE Chiaramente poi non potrai voler avere Active Desktop.
Antonio

 disinstallare completamente IE4 (anti-trust, aiutaci tu!), e non avendo
Dai un'occhiata quě:
http://www.98lite.net/
 rende possibile l'impossibile, pare.
Altre due soluzioni: la prima č quella di usare WIN 95 OSR 2.5,
molto piů veloce e leggero, la seconda č passare a Linux ;-)))
Bye, G.
--
---------------------------------------------
    Le risposte alle tue domande le trovi
    sul Sito Comune di questo NewsGroup:
 
http://www.murialdo.it/it_lang_vb
       ... e nell'help in linea !
---------------------------------------------
Real E-address: 
gaet...@hotmail.com