minus
是 oracle 数据库中的一个关键字,用来取两个结果集的差集。
举个栗子:第一个结果集有 1,2,3,4,5,第二个结果集有 4,5,6,7。前者减后者得 1,2,3,后者减前者得 6,7。
minus
有去重作用,会对减完的结果集去重。还是上面的栗子,如果第一个结果集有两个 1,那取差集后只能得到一个 1。
但是我实际的需求是不想要去重,该怎么办呢?找到了两个方法,如下:
一、用 not exists
改不了 minus
关键字,那就只能用其他的关键字来实现类似的效果了。not exists
是可以很简单、很方便实现 minus
的差集效果的
栗子:有表数据如下
效果如下:
minus |
|
not exists |
|
后面我还发现如果需要保留一些特殊列值时,
not exists
可以很方便,而minus
不方便实现,比如需要保留原数据序号,每行数据的序号是不一样的,这样就用不了minus
了
二、用 left join
经过自己测试,如果做差集的两个结果集来自于同一个表,似乎就不适用了。如果是两个表,那可以实现需要的效果。
表2原数据
差集效果:
最后,不管是
minus
,还是not exists
,或是left join
,哪个能满足自己的需求,越简单越方便越好,就用哪个吧