Oracle SQL Query rewrite: (NOT) EXISTS sub-query to (NOT) IN sub-query
(NOT) EXISTS sub-query to (NOT) IN sub-query
This is an article of Oracle SQL Query rewrite serials.
Take this sql for example:
SELECT tax_line_id
FROM zx_lines zl
WHERE application_id = :B3
AND entity_code = :B2
AND event_class_code = :B1
AND (process_for_recovery_flag = 'Y'
OR item_dist_changed_flag = 'Y')
AND EXISTS (SELECT 1
FROM zx_lines_det_factors
WHERE application_id = zl.application_id
AND entity_code = zl.entity_code
AND event_class_code = zl.event_class_code
AND trx_id = zl.trx_id
AND trx_line_id = zl.trx_line_id
AND trx_level_type = zl.trx_level_type
AND event_id = :B4);
SQL will be translated into:
SELECT tax_line_id
FROM zx_lines zl
WHERE application_id = :B3
AND entity_code = :B2
AND event_class_code = :B1
AND ( process_for_recovery_flag = 'Y'
OR item_dist_changed_flag = 'Y' )
AND ( zl.application_id, zl.entity_code, zl.event_class_code, zl.trx_id,
zl.trx_line_id, zl.trx_level_type ) IN (SELECT application_id,
entity_code,
event_class_code,
trx_id,
trx_line_id,
trx_level_type
FROM zx_lines_det_factors
WHERE event_id = :B4)
Download this demo: C# version

