Oracle SQL Query rewrite: (NOT) IN sub-query to (NOT) EXISTS sub-query
Change (NOT) IN sub-query to (NOT) EXISTS sub-query
This is an article of Oracle SQL Query rewrite serials.
For this input sql:
SELECT * FROM emp, salary WHERE emp.emp_id = salary.emp_id AND emp.dept_no IN (SELECT dept_no FROM dept WHERE dept.location = 'SEOUL' ) AND emp.emp_id NOT IN (SELECT emp_id FROM emp_retirement c WHERE c.retire_type = 'NORMAL' );
SQL will be translated into:
SELECT * FROM emp, salary WHERE emp.emp_id = salary.emp_id AND EXISTS (SELECT 1 FROM dept WHERE dept.location = 'SEOUL' AND emp.dept_no = dept.dept_no) AND emp.emp_id NOT IN (SELECT emp_id FROM emp_retirement c WHERE c.retire_type = 'NORMAL')
or
SELECT * FROM emp, salary WHERE emp.emp_id = salary.emp_id AND emp.dept_no IN (SELECT dept_no FROM dept WHERE dept.location = 'SEOUL') AND NOT EXISTS (SELECT 1 FROM emp_retirement c WHERE c.retire_type = 'NORMAL' AND emp.emp_id = c.emp_id)
Download this demo: C# version