查询在 sql developer 中工作,但在 sql plus 中不工作,它应该抛出错误

Posted

技术标签:

【中文标题】查询在 sql developer 中工作,但在 sql plus 中不工作,它应该抛出错误【英文标题】:Query is working in sql developer but not in sql plus and it should throw an error 【发布时间】:2020-04-13 15:11:26 【问题描述】:

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

EMP 表具有与表EMPLOYEES 相同的 107。这里select salary from dual 应该在 where 子句中产生错误,但它不会。如何?

另一方面,它在 SQL Developer 中返回行,而不是在 sqlplus 中。为什么?

【问题讨论】:

不,如果'select Salary from dual'只返回1行&列,则不会抛出错误,如果返回的值存在于“select Salary from employees”中,将返回emp表中的所有行.如果该值不存在,则不会返回任何行 但是salary不是表dual的有效标识符,它不会返回任何行。 @AmanSinghRajpoot 正如 Littlefoot 的回答中指出的那样,鉴于上下文,该子查询中的 salary 是对 emp.salary 的有效引用。这称为标量子查询。对于emp 中的每一行,子查询将从该行返回salary 的值。 没关系,让我把你的查询改写成这样 -> select * from emp where '1000' in (select Salary from employees);这可能对你更有意义 是的,非常感谢。 【参考方案1】:

好!希望它会教您使用表格别名。没有它们,它就是emp 表中的一列;因为它存在,所以没有抛出错误。

我没有你的桌子,所以 Scott's 可以。

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>

【讨论】:

是的,知道了。非常感谢你。但是为什么它确实在 sql developer 中而不是在 sql plus 中起作用。 不客气。对我来说,查询在两种环境中的工作方式都是一样的。如果您在 SQL Developer 中将数据插入到其中一些表中,您是否提交?如果不是,则数据在 SQL*Plus 中不可见。 我截断了表格并插入了新行,这是我的错误。未提交的数据。 对;它发生了:)【参考方案2】:

为什么在不需要的时候使用子查询?这应该做你想做的事:

select e.*
from emp e
where e.salary in (select salary from employees);

【讨论】:

以上是关于查询在 sql developer 中工作,但在 sql plus 中不工作,它应该抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

查询在 SQL Server 中工作,但在 RODBC 中不工作

Laravel 查询构建器 - 查询不工作但在 SQL 控制台中工作

SQL 无效列错误。在sql developer中工作,在java中给出错误

MySql 查询在 PHPmyadmin 中工作,但在 codeigniter 中不工作

Mysql 查询在 Codeigniter 中返回空结果,但在本机 PHP 中工作正常

使用 Oracle 和 PHP:在 SQL Developer 中工作,但 PHP 文件结果 ORA-00900:无效语句