2016-05-16 5 views
0

私は2つのテーブル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は、相関サブクエリを1レベル深くサポートしています。したがって、外部クエリの列のスコープには、例のサブクエリが含まれています。

あなたが書いたクエリは同等です:

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でない場合に発生します。妙に、代わりの列が存在しないというエラーを報告し、その結果が非nullにして、トップを選択するために返される、ということらしいあなたのケースで

はまだ

関連する問題