簡體   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