Here is the scenario: I have two tables department and employee. when i'm selecting a column from a table which doesn't exist in that table, it's throws error as expected. However, when i'm using subquery and again selecting the same column from the same table it's working. I don't understand how it can ignore my error.
create table department
( DEPT_ID                    NUMBER(2),
 DEPT_NAME                  VARCHAR2(6) );
 insert into department values(1,'ch');
 create table employee
 ( EMP_ID                     NUMBER(2),
 EMP_NAME                   VARCHAR2(6),
 EMP_DEPT_ID                NUMBER(2)
 );
 insert into employee values(0,'ch',1);
--getting  error for below (ORA-00904: "DEPT_ID": invalid identifier)
 select dept_id
from employee;
 -- not getting any error and can see the output for below sql statement. How it can consider invalid column for employee table dept_id in this query.
 select *
from   department
where dept_id in 
(
-- Incorrect column name
select dept_id
from employee
);
I have tried this with 2 RDBMS oracle and MSSQL. Case is the same with both. I didn't check with others
Since you don't qualify the columns, your query
select *
from   department
where dept_id in 
(
-- Incorrect column name
select dept_id
from employee
);
will be "evaluated" as
select d.*
from   department d
where d.dept_id in 
(
select d.dept_id
from employee e
);
A sub-query can reference its outer query's columns. Always qualify all columns when there are more than one table involved!
What you probably want is
select d.*
from   department d
where d.dept_id in 
(
select e.EMP_DEPT_ID
from employee e
);
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With