2009-12-21 9 views
14

Ich versuche, auf eine ausgewählte Anweisung wie folgt eine innere Verknüpfung zu machen:SQL Inner Join auf select-Anweisungen

select * 
from (select* from bars where rownum <= 10)as tab1 
inner join (select * from bars where rownum <= 10)as tab2 
on tab1.close=tab2.close 

und ich erhalte die folgende Fehlermeldung: ORA-00933 SQL-Befehl beendet nicht richtig Jede Hilfe wäre dankbar, danke!

Antwort

39

Entfernen Sie einfach as aus Ihrer Anfrage:

select * 
from (select* from bars where rownum <= 10) tab1 
inner join (select * from bars where rownum <= 10) tab2 
on tab1.close=tab2.close 
+1

Hallo egorius, danke, es funktionierte. Ich verstehe immer noch nicht, warum manchmal oracle das as akzeptiert und manchmal nicht – user235693

+5

'As' kann (optional) vor einem COLUMN-Alias ​​verwendet werden. TABLE-Aliase können nicht mit 'as' vorangestellt werden. Zum Beispiel: "wähle count (*) als cnt aus dual d". –

+1

Vielleicht möchten Sie sich das SELECT-Syntaxdiagramm ansehen (es ist ziemlich groß, aber definiert die exakte Syntax): http://download.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_103a.htm#SQLRF01702 –

1
select * from 
((select* from bars where rownum <= 10)as tab1 
inner join (select * from bars where rownum <= 10)as tab2 
on tab1.close=tab2.close) 
2

Ich glaube, der Fehler von Ihnen kommt ein Semikolon, um die Anweisung zu beenden. Die Auswahl sieht ansonsten gut aus.

1

nur ein Leerzeichen zwischen geben ')' und 'wie':

select * from (select* from bars where rownum <= 10) as tab1 
inner join 
(select * from bars where rownum <= 10) as tab2 
on 
tab1.close=tab2.close