Oracle select query с внутренней ошибкой выбора запроса
Я получаю ошибку SQL и пытаюсь решить, любые указатели были бы полезны,
// это выполняется
SELECT empid FROM employees WHERE deptid IN (10,20,30,40 );
// это выполняется
SELECT deptid FROM department WHERE description LIKE '%application%'
ORDER BY createddate DESC
но приведенный ниже запрос выдает ошибку:
SELECT empid FROM employees WHERE deptid IN (SELECT deptid FROM department WHERE description LIKE '%application%'
ORDER BY createddate DESC);
ошибка: ORA-00907: отсутствует правая скобка 00907. 00000 - "отсутствует правая скобка"
обновление: 07/14:
обновление с точным решением от @dasblinkenlight:
проблема заключается в размещении заказа в подзапросе предложения WHERE. язык SQL синтаксис не позволяет упорядочивать элементы подзапроса в Предложение WHERE, поскольку оно не изменяет результат запроса в целом
эта статья хорошо объясняет многие понятия - http://oraclequirks.blogspot.com/2008/01/ora-00907-missing-right-parenthesis.html
" ORA-00907: отсутствует справа скобки ясно, когда один получает сообщение как это, первая реакция, вероятно, проверить, какие скобки был опущен, но, к сожалению, нет отсутствующих скобок вообще в этом заявлении.
чтобы сократить его, Нерассказанная синтаксическая причуда суммируется следующим образом: не используйте ORDER BY внутри подзапроса IN.
теперь можно возразить, что действительно нет смысла использовать порядок По внутри предложения IN, что верно, потому что Oracle не волнует о порядке строк внутри предложения IN:"
я попробовал оператор SQL с предложением WHERE и " = "вместо " IN", и он все еще бросил ошибку:"missing right parenthesis
'.
вывод 1 :
" не используйте ORDER BY в подзапросе предложения WHERE" или "подзапросы в предложении where не могут использовать ORDER BY в Oracle"
вывод 2
этот пример-исследование также показывает сценарий куда мы должны пойти для JOIN, а не выбирать подзапрос
2 ответов
проблема заключается в размещении ORDER BY
на WHERE
п. подзапрос. Синтаксис SQL не позволяет упорядочивать элементы подзапроса в WHERE
предложение, потому что оно не изменяет результат запроса в целом.
вы должны переместить его исправить синтаксис:
SELECT empid FROM employees WHERE deptid IN
(
SELECT deptid FROM department WHERE description LIKE '%application%'
)
ORDER BY createddate DESC
createddate
не является столбцом вemployees
таблица. Она существует только вdepartment
стол
тогда вам нужно присоединиться к department
таблица, и использовать ORDER BY
on одна из его колонок:
SELECT e.empid
FROM employees e
JOIN department d ON e.deptid = d.deptid
WHERE d.description LIKE '%application%'
ORDER BY d.createddate DESC
очевидно, вам не нужно order by
в вашем подзапросе, и вы можете удалить его, а затем скобки будут в порядке
SELECT empid
FROM employees
WHERE deptid IN (SELECT deptid
FROM department
WHERE description LIKE '%application%');
Если вы хотите применить order by
вам придется сделать это на вашем внешнем запросе