繁体   English   中英

oracle忽略子查询中的无效标识符错误

[英]oracle ignores invalid identifier error in subquery

我不理解为什么以下查询有效,尽管子查询给出了“无效标识符”错误。

SELECT *
FROM aircraft
WHERE airc_manufact IN (SELECT airc_manufact FROM flight);

我的表如下所示(缩写):

飞机( airc_model(PK) ,airc_manufact)

飞行( flt_no(PK)airc_model(FK)

如果我自己运行子查询,那么我会收到类似“无效标识符”的错误,因为airc_manufact不在排行表中。

如果我运行整个查询,则不会收到错误消息。 Oracle似乎忽略了子查询,因此给了我飞机表中的所有行。

在我看来,这似乎是一个错误,因为查询中存在明显的错误。 为什么查询运行? 我的理解是,Oracle将首先运行或评估子查询,然后运行外部查询。

您尚未限定列名。 因此,您认为自己正在跑步:

SELECT a.*
FROM aircraft a
WHERE a.airc_manufact IN (SELECT f.airc_manufact FROM flight f);

如果f.airc_manufact不存在,则作用域规则会说要在外部查询中查找。 因此,您真正正在运行的是:

SELECT a.*
FROM aircraft a
WHERE a.airc_manufact IN (SELECT a.airc_manufact FROM flight f);

作为过滤子句,这是毫无用处的。

道德: 始终限定查询中的列名,尤其是当查询引用多个表时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM