2016-08-13 34 views
0

我在Oracle中使用SQL。我已經使用別名不止一次地拉回同一個表(但是代碼似乎甚至沒有閱讀過)。SQL來自關鍵詞沒有預期的地方?

我收到消息

ORA-00923 FROM關鍵字未找到預期。

任何想法,爲什麼我在下面的代碼得到這條消息?

select 
T1."MORTGAGE" "c1", 
T1."ACCNO" "c2", 
T2."TIERRATE" "c3", 
T3."PRODCODE" "c4" 
T3."MTRANEFF" "c5", 
T3."RECTYPE" "c6", 
T4. "PRODCODE" "c7", 
T4."MTRANEFF" "c8", 
T5."TIERRATE" "c9" 
from 
"BEL"."ACM01" T1,   
"BEL"."ACM03" T2,  
"BEL"."ACT13" T3,  
"BEL"."ACT13" T4,  
"BEL"."ACM03" T5   
where 
T1."PRODCODE"=T2."PRODCODE" and 
T1."ACCNO"=T3."ACCNO" and 
T3."ACCNO"=T4."ACCNO" AND 
T1."PRODCODE"=T5."PRODCODE" and 
T3."RECTYPE"='PR' and T1."PRODCODE" in ('NOR', 'UF3') 

回答

2

在第四行「c4」之後,您再次丟失逗號。

但是,你應該學會使用正確的,明確的JOIN語法。查詢應該是這樣的:

select T1."MORTGAGE" as "c1", T1."ACCNO" as "c2", T2."TIERRATE" as "c3", 
     T3."PRODCODE" as "c4", T3."MTRANEFF" as "c5", T3."RECTYPE" as "c6", 
     T4. "PRODCODE" as "c7", T4."MTRANEFF" as "c8", T5."TIERRATE" as "c9" 
from "BEL"."ACM01" T1 join   
    "BEL"."ACM03" T2 
    on T1."PRODCODE" = T2."PRODCODE" join 
    "BEL"."ACT13" T3 
    on T1."ACCNO" = T3."ACCNO" join 
    "BEL"."ACT13" T4 
    on T3."ACCNO" = T4."ACCNO" join  
    "BEL"."ACM03" T5   
    on T1."PRODCODE" = T5."PRODCODE" 
where T3."RECTYPE" = 'PR' and T1."PRODCODE" in ('NOR', 'UF3'); 

注:

  • 決不FROM子句中使用逗號。 始終使用使用正確的顯式JOIN語法。使用as來定義列別名。這種習慣可以在忽略逗號時幫助發現錯誤。
  • 不要打擾將列名稱放在雙引號之間。它只是使查詢更難以閱讀。選擇不需要轉義的列名稱。
  • 爲您提供有意義的表別名。僅列舉T1,T2等不會向閱讀查詢的人提供太多信息。
+2

絕不總是有趣的單詞 - 大多數Oracle用戶完全按照海報寫入SQL,沒有任何問題。他的問題是一個缺少的逗號,只有缺失的逗號。 – thatjeffsmith

+2

@thatjeffsmith - 其餘的部分可能是主觀的(儘管Gordon所說的一切都有很強的客觀原因),但是「大多數Oracle用戶完全按照海報沒有問題編寫SQL」的說法是錯誤的,兩次都是錯誤的。大多數Oracle用戶和(幾乎)所有好用戶都按照Gordon的建議寫SQL。以及那些沒有遇到常見問題的人,見證了這個論壇上的很多問題,以及類似問題,這些問題完全是由於違反了Gordon提供的簡單規則而造成的。 – mathguy

+0

@mathguy false?我想我只是在和壞人聊天。 – thatjeffsmith

相關問題