[英]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.