2016-08-13 2 views
0

Я использую SQL в Oracle. Я использовал псевдонимы, чтобы вытащить одну и ту же таблицу более одного раза (но коды, похоже, не читаются так далеко).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 - остальное, возможно, субъективно (хотя все, что сказал Гордон, имеет очень сильные объективные причины), но утверждение, что «большинство пользователей Oracle записывает свой SQL точно так, как плакат без проблем», является ложным, дважды. Большинство пользователей Oracle и (почти) все хорошие, пишут SQL так, как предложил Гордон; и те, кто не сталкивается с частыми проблемами, являются свидетелями очень большого количества вопросов на этом форуме и подобных, где проблема вызвана именно тем, что нарушают простые правила, предложенные Гордоном. – mathguy

+0

@mathguy false? Думаю, я просто работаю и разговариваю с плохими. – thatjeffsmith