首发于 SQL

SQL | AB、BA去重问题(含多种大小情况)

需求1:表中同时存在数据AB和BA,但我们只想保留其中一种情况(AB和BA视为同一种情况),怎么做?

源数据表t1:

id num_1 num_2
1 88 99
2 99 88
3 30 24
4 24 30

用大于号或者小于号搞定:

select num_1, num_2
from t1 
where num_1 > num_2

select num_1, num_2
from t1 
where num_1 < num_2

需求2:如果是以下源数据,需求不变,怎么做?

id num_1 num_2
1 30 24
2 24 30
3 958 497
4 88 99

这种情况同时存在大于、小于、大于小于的情况,如果直接用需求1的解决方式,肯定会丢数据。

解决思路:union all复制一遍数据再比较即可。

with tmp as(
select num_1, num_2
from t1 
union all