minus 如何实现不去重效果

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 如何实现不去重效果
效果如下:

minus minus 如何实现不去重效果
not exists minus 如何实现不去重效果

后面我还发现如果需要保留一些特殊列值时,not exists 可以很方便,而 minus 不方便实现,比如需要保留原数据序号,每行数据的序号是不一样的,这样就用不了 minus

二、用 left join

经过自己测试,如果做差集的两个结果集来自于同一个表,似乎就不适用了。如果是两个表,那可以实现需要的效果。
表2原数据
minus 如何实现不去重效果
差集效果:
minus 如何实现不去重效果

最后,不管是minus,还是not exists,或是left join,哪个能满足自己的需求,越简单越方便越好,就用哪个吧

上一篇:exists用法 exists用法讲解


下一篇:GO 判断一个文件是否存在