Запрос работает в sql разработчику, но не в sql плюс, и должен выдать ошибку - PullRequest
1 голос
/ 13 апреля 2020

enter image description here

select * 
from emp
where 
    (select salary from dual) in (select salary from employees);

EMP Таблица содержит те же 107, что и в таблице EMPLOYEES. Здесь select salary from dual должно выдавать ошибку в предложении where, но это не так. Как?

С другой стороны, он возвращает строки в SQL Developer, но не в sqlplus. Почему?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

Хорошо! Надеюсь, это научит вас использовать таблицу псевдонимы . Без них это был столбец из таблицы emp; поскольку она существует, не было выдано никакой ошибки.

У меня нет ваших таблиц, поэтому Скотт подойдет.

SQL> create table employees as select * From emp where deptno = 10;

Table created.

SQL> select a.*
  2  from emp a
  3  where
  4      (select a.sal from dual d) in (select b.sal from employees b);

     EMPNO ENAME      JOB              MGR HIREDATE        SAL       COMM     DEPTNO
---------- ---------- --------- ---------- -------- ---------- ---------- ----------
      7782 CLARK      MANAGER         7839 09.06.81       2450                    10
      7839 KING       PRESIDENT            17.11.81       5000                    10
      7934 MILLER     CLERK           7782 23.01.82       1300                    10

SQL> select a.*
  2  from emp a
  3  where
  4      (select d.sal from dual d) in (select b.sal from employees b);
    (select d.sal from dual d) in (select b.sal from employees b)
            *
ERROR at line 4:
ORA-00904: "D"."SAL": invalid identifier


SQL>
0 голосов
/ 13 апреля 2020

Почему вы используете подзапрос, когда он не нужен? Это должно делать то, что вы хотите:

select e.*
from emp e
where e.salary in (select salary from employees);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...