查询在 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:无效语句