SQL: ошибка ORA-00933 в выборе - PullRequest
       0

SQL: ошибка ORA-00933 в выборе

2 голосов
/ 11 января 2012

Я пытаюсь выполнить несколько сложный выбор из 3 таблиц, все из которых объединены b_id:

select max(bs.b_id), 
       h.b_type_id, 
       t.name_id 
  from b_state as bs, 
       t_info as t, 
       history as h 
 where bs.b_id = t.b_id 
   and bs.b_id = h.b_id 
   and t.name_id in (???) 
   and bs.is_detached = ? 
 group by h.b_type_id, 
          t.name_id

В MySQL это дает именно то, что я хочу, но в PSQL и Oracle это дает сбой, плюс выполнение в Oracle приводит к: «ORA-00933: SQL command not properly ended» (что обычно происходит в запросах INSERT, как предлагает Google).

Полагаю, есть независимый от БД способ сделать то же самое. Пожалуйста, совет.

Ответы [ 4 ]

2 голосов
/ 11 января 2012

Попробуйте:

select max(bs.b_id), h.b_type_id, t.name_id 
  from b_state bs
  inner join t_info t on bs.b_id = t.b_id
  inner join history h on bs.b_id = h.b_id
  where t.name_id in (???) and bs.is_detached = ?
  group by h.b_type_id, t.name_id
1 голос
/ 11 января 2012

Я предлагаю задать псевдоним max и (при необходимости) разделять запятыми параметры в предложении in, например:

select max(bs.b_id) max_b_id, 
       h.b_type_id, 
       t.name_id 
  from b_state as bs, 
       t_info as t, 
       history as h 
 where bs.b_id = t.b_id 
   and bs.b_id = h.b_id 
   and t.name_id in (?,?,?) 
   and bs.is_detached = ? 
 group by h.b_type_id, 
          t.name_id
1 голос
/ 11 января 2012

Oracle использует :varname для привязки переменных вместо ?.

Так что попробуйте что-то вроде

select 
  max(bs.b_id),
  h.b_type_id,
  t.name_id    
from 
  b_state as bs,
  t_info  as t,
  history as h  
where 
  bs.b_id = t.b_id            and 
  bs.b_id = h.b_id            and 
  t.name_id in (:1, :2, :3)   and 
  bs.is_detached = :4
group by 
 h.b_type_id,           
 t.name_id 
1 голос
/ 11 января 2012

Попробуйте это:

select max(bs.b_id),
       h.b_type_id,
       t.name_id
  from b_state bs,
       t_info t,
       history h
 where bs.b_id = t.b_id
   and bs.b_id = h.b_id
   and t.name_id in (???)
   and bs.is_detached = ?
 group by h.b_type_id,
          t.name_id 

Использование псевдонимов таблиц «as» вызывало проблемы в Oracle.

РЕДАКТИРОВАТЬ: я использовал синтаксис SQL-86, как это то, чтовы изначально опубликовали, но вы по умолчанию должны использовать синтаксис SQL-92.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...