2016-05-16 59 views
0

我有兩個表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:無效的標識符,但它返回從EMP表中的記錄。

回答

0

這是因爲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); 

,那麼你會得到你的錯誤期待着。

+0

謝謝你的澄清。我嘗試通過使用別名,並得到一個錯誤。 – hemalp108

0

這發生在子查詢的結果不爲null時。

你的情況似乎是,奇怪的是,而不是報告錯誤,列不存在,結果是,以非空,然後選擇頂部返回還在做