MySQL 确定那些行是彼此互换的

备注:测试数据库版本为MySQL 8.0

测试数据:

drop table t2;

create table t2(test1 int,test2 int);

insert into t2 values (20,20);
insert into t2 values (50,25);
insert into t2 values (20,20);
insert into t2 values (60,30);
insert into t2 values (70,90);
insert into t2 values (80,130);
insert into t2 values (90,70);
insert into t2 values (100,50);
insert into t2 values (110,55);
insert into t2 values (120,60);
insert into t2 values (130,80);
insert into t2 values (140,70);

一.需求

一个表中包含两次考试的结果,要确定哪些分数对是互换的。
互换的概念 test1 和 test2的值对调

下面列出表t2的结果集:
mysql> select * from t2;
±------±------+
| test1 | test2 |
±------±------+
| 20 | 20 |
| 50 | 25 |
| 20 | 20 |
| 60 | 30 |
| 70 | 90 |
| 80 | 130 |
| 90 | 70 |
| 100 | 50 |
| 110 | 55 |
| 120 | 60 |
| 130 | 90 |
| 140 | 70 |
±------±------+
12 rows in set (0.00 sec)

检验这些结果,会发现 test1 70和 test2 90的考试分数是互换的(存在test1 90 和 test2 70的行);

要求每对互换行仅找出一个互换对,其结果集应如:

test1 test2
20 20
70 90
80 130

而不是:
test1 test2
20 20
20 20
70 90
90 70
80 130
130 80

二.解决方案

代码:

select distinct v1.*
  from t2 v1,t2 v2
where v1.test1 = v2.test2
  and v1.test2 = v2.test1
  and v1.test1 <= v1.test2;

测试记录:

mysql> select distinct v1.*
    ->   from t2 v1,t2 v2
    -> where v1.test1 = v2.test2
    ->   and v1.test2 = v2.test1
    ->   and v1.test1 <= v1.test2;
+-------+-------+
| test1 | test2 |
+-------+-------+
|    20 |    20 |
|    70 |    90 |
|    80 |   130 |
+-------+-------+
3 rows in set (0.00 sec)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值