Jor*_*mer 2 sql oracle query-optimization
我维护的查询如下:
select field_1, field_2
from source_table
minus
select field_1, field_2
from source_table
where status_code in (3, 600);
Run Code Online (Sandbox Code Playgroud)
当我查看这个查询时,我立刻想到,"那太蹩脚了.为什么不使用'NOT IN'并删除MINUS业务.所以我重写它是这样的:
select field_1, field_2
from source_table
where status_code not in (3, 600);
Run Code Online (Sandbox Code Playgroud)
为了仔细检查我的理智,我得到了每个查询的计数.令我惊讶的是,第一个查询返回了789,089条记录,第二条查询返回了1,518,450条记录!
我从几个角度看了这个,但无法弄清楚这两个查询是如何不同的.任何人都可以解释发生了什么,或者为什么我今天早上是白痴?
这些查询确实不同.field_1并且field2不等于status_code3和600. field_1可以是'A'并且field_2可以是'B',因此您将从第一个SELECT中删除记录A, B.原始可能是实现正确结果的最佳方式.
编辑:为了让您更好地了解正在发生的事情,您可以通过执行子查询以类似于您编写查询的方式获得相同的结果:
select distinct field_1, field_2
from source_table
where (field_1, field_2) not in (
select field_1, field_2
from source_table
where status_code in (3, 600)
);
Run Code Online (Sandbox Code Playgroud)