Oracle SQL Query rewrite: NOT EXISTS to NOT IN hash anti-join
NOT EXISTS to NOT IN hash anti-join
If SQL statement has NOT EXISTS sub-query then we can re-write it using NOT IN hash anti-join.
This is an article of Oracle SQL Query rewrite serials.
Take this sql for example:
SELECT sum(salary)
FROM emp, salary
WHERE emp.emp_id = salary.emp_id
AND NOT EXISTS (SELECT 1
FROM dept
WHERE dept.location = 'SEOUL'
AND emp.dept_no = dept.dept_no
) ;
SQL will be translated into:
SELECT SUM(salary)
FROM emp,
salary
WHERE emp.emp_id = salary.emp_id
AND emp.dept_no IS NOT NULL
AND emp.dept_no NOT IN (SELECT /*+ HASH_AJ */ dept.dept_no
FROM dept
WHERE dept.location = 'SEOUL'
AND dept.dept_no IS NOT NULL)
Download this demo: C# version

