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