2013-10-01 5 views
0

Я получаю сообщение ORA-00923 (FROM ключевое слово не найдено, где ожидалось), когда я запускаю этот запрос в sql * plus.Проблемы с запросом в SQL * PLUS

SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME 
FROM EMPLOYEES 
WHERE (JOB_ID, DEPARTMENT_ID) 
IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY) 
AND DEPARTMENT_ID=80; 

Я побежал этот запрос в SQL Developer и угадать, что он работает без каких-либо проблем, почему я получаю сообщение об ошибке при попытке в SQL * Plus.

+2

Только запрос: Почему вы используете 'DEPARTMENT_ID' в своем месте где дважды? Если 'DEPARTMENT_ID' должно быть' 80', вы можете просто получить 'job_id' в своем внутреннем запросе? – heretolearn

+0

В SQL Plus Client вы можете разбить свой запрос на несколько строк, чтобы изолировать проблему. – heretolearn

+0

Я знаю, но я просто практиковал тему подзапроса. У меня нет той же базы данных, в которой есть книга, поэтому я делаю этот запрос на практике. xDDDDD –

ответ

1
SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME 
    FROM EMPLOYEES 
WHERE JOB_ID IN (SELECT JOB_ID 
         FROM JOB_HISTORY 
        WHERE DEPARTMENT_ID = 80); 

ИЛИ

SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME 
    FROM EMPLOYEES 
WHERE JOB_ID IN (SELECT JOB_ID FROM JOB_HISTORY) AND DEPARTMENT_ID = 80; 

ИЛИ

SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME 
    FROM EMPLOYEES E 
WHERE EXISTS (SELECT NULL 
        FROM JOB_HISTORY J 
        WHERE J.JOB_ID = E.JOB_ID) 
     AND DEPARTMENT_ID = 80; 
+0

Это лучше, чем мой ответ. +1 –

0

Я не знаю, что вы пытаетесь достичь, но вот одно из возможных решений:

/* Formatted on 10/1/2013 1:50:20 PM (QP5 v5.126.903.23003) */ 
SELECT EMPLOYEE_ID, FIRST_NAME || ' ' || LAST_NAME AS FULLNAME 
    FROM  EMPLOYEES EMP 
     JOIN 
      JOB_HISTORY JH 
     ON EMP.JOB_ID = JH.JOB_ID AND EMP.DEPARTMENT_ID = JH.DEPARTMENT_ID 
WHERE EMP.DEPARTMENT_ID = 80; 
+2

'' Я не знаю, чего вы пытаетесь достичь, но вот возможное решение ", заставило меня улыбнуться. без обид, извините) –

+0

@beherenow, самому вопросу действительно не хватает объяснений того, чего он действительно пытается достичь. Извините. = D –

+1

Просто практика с подзапросами =) –

1

Ваш запрос полностью действителен и работает в sqlplus точно так, как он должен:

14:04:01 (41)[email protected]> l 
    1 SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME 
    2 FROM EMPLOYEES 
    3 WHERE (JOB_ID, DEPARTMENT_ID) 
    4 IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY) 
    5* AND DEPARTMENT_ID=80 
14:04:05 (41)[email protected]>/

34 rows selected. 

Elapsed: 00:00:00.01 

Вы сталкиваетесь с ORA-00923, только когда у вас есть синтаксическая ошибка. Например:

14:04:06 (41)[email protected]> ed 
Wrote file S:\spool\sandbox\BUF_HR_41.sql 

    1 SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME X 
    2 FROM EMPLOYEES 
    3 WHERE (JOB_ID, DEPARTMENT_ID) 
    4 IN (SELECT JOB_ID, DEPARTMENT_ID FROM JOB_HISTORY) 
    5* AND DEPARTMENT_ID=80 
14:05:17 (41)[email protected]>/
SELECT EMPLOYEE_ID, FIRST_NAME||' '||LAST_NAME AS FULLNAME X 
                  * 
ERROR at line 1: 
ORA-00923: FROM keyword not found where expected 

Возможно, вы сделали это при копировании запроса с sqldeveloper на sqlplus? Вы уверены, что ваш пост содержит точно, символ-к-символу, запрос, который вы на самом деле пытаетесь выполнить? Я бы обратил больше внимания на текст запроса и сообщение об ошибке - он обычно указывает на ошибку, например * под X в моем примере.

+0

Спасибо за аналог. возможно, это была синтаксическая ошибка, которую я не видел, я снова запустил запрос, и он сработал. –

Смежные вопросы