子查询无效但外部查询 returns 条记录

Invalid Subquery yet outer query returns the records

我有两个 table EMP 和 DEPT。以下是说明。

**EMP table:**

EMP_ID        NUMBER      
EMP_NAME      VARCHAR2(4)

**DEPT table:**

DEPT_ID        NUMBER      
DEPT_NAME      VARCHAR2(4)

当我 运行 下面的查询执行成功时,即使子查询无效。

SELECT * FROM EMP WHERE EMP_ID IN (SELECT SAL FROM DEPT);

我期待 ORA-00904:标识符无效,但它 returns 来自 EMP table.

的记录

当子查询的结果不为空时会发生这种情况。

在你的情况下,奇怪的是,报告列不存在的错误,返回结果是为了非空然后select顶部仍然完成

这是因为 Oracle 支持更深一层的相关子查询。因此,外部查询中列的范围包括您示例中的子查询。

您编写的查询等同于:

SELECT *
FROM   EMP
WHERE  EMP_ID IN (SELECT EMP.SAL
                  FROM   DEPT);

它还强调了为您的查询适当别名的必要性——如果您写过:

SELECT *
FROM   EMP
WHERE  EMP_ID IN (SELECT DEPT.SAL
                  FROM   DEPT);

那么你就会得到你所期望的错误。