2013-07-31 2 views
0

я получаю сообщение об ошибке при обработке этого запроса:SQL проблема с скобкой

SELECT * 
FROM example 
WHERE pri IN (
    SELECT pri 
    FROM (
     SELECT pri 
      ,sbst 
      ,st 
      ,count(*) AS cnt 
     FROM example 
     WHERE sbst = 'oi' 
     GROUP BY pri 
     ) AS tmp 
    WHERE cnt = 1 
     AND st = 'ko' 
    ) 
AND sbst = 'cp'; 

ошибка заключается в следующем:

ORA-00907: отсутствует правая скобка 00907. 00000 - " отсутствует правая скобка» * Причина:
* Действие: Ошибка в строке: 5 Колонка: 136

Но я не думаю, что пропустил круглую скобку.

+0

какая база данных и версия sql? –

ответ

5

Возможно, вам нужно GROUP BY Pri, СТПО, ул

SELECT * 
from example 
WHERE pri IN 
(
    SELECT pri 
    FROM 
    (
     SELECT pri, 
       sbst, 
       st, 
       count(*) AS cnt 
     FROM example 
     WHERE sbst = 'oi' 
     GROUP BY pri, 
       sbst, 
       st 
    ) tmp 
    WHERE cnt = 1 AND st = 'ko' 
) AND sbst = 'cp'; 
+0

Да, это единственная ошибка синтаксиса –

+0

Вы избили меня на минуту: P, но я просто попробовал Oracle 11g. Помимо 'group by' мне пришлось удалить' AS' в 'AS TMP', чтобы он работал. –

0

отформатируйте длинные запросы. Тогда вы могли видеть, что случилось. Кроме того, использование псевдонимов, чтобы избежать скрытых ошибок

select * 
from example as e 
where 
    e.pri in (
     select 
      tmp.pri 
     from (
      select e2.pri, e2.sbst, e2.st, count(*) as cnt 
      from example as e2 
      where e2.sbst = 'oi' 
      group by e2.pri 
     ) as tmp where tmp.cnt = 1 and tmp.st = 'ko' 
    ) and e.sbst = 'cp'; 

Извините за что не является ответом, на самом деле я не люблю читать неотформатированные запросы на SO или в рабочем коде.

+0

Действительно, форматирование запросов помогает понять, что с ним не так ... –