寻找数据表中一列相同并且存在另一列有不同值的记录

假如我有一张表  T  其中有两列 ,如下图所示:
AB
13
13
25
24
37
37
  
其中,A列值为1的对应B列的值都为3,A列值为为2对应B列的值有两个,一个是5,一个是4,我们的目的就是列出  2  5,2 4 这两条记录。

第一种方法,巧妙的采用了max 和min函数,当我们使用A列分组后,如果 max(B)=min(B),那么B列的所有值肯定是相同的。反之则是我们需要寻找的记录。SQ如下:
select * from T where T.A in 
     (select Ti.A from T Ti group by Ti.A having max(Ti.B)<>min(Ti.B))

也可以采用另一种写法

select * from T where T.A in 
     (select Ti.A from (select distinct A,B from T) Ti group by Ti.A 
       having count(Ti.B)>1

上面的写法先去除A,B当中重复的列,然后根据A列分组,计算B列不同值的个数,此方法相比较上面一种增加了一个select,复杂了一些!

不够发现可以把内部的select 去掉,简化版如下:

select * from T where T.A in 
     (select Ti.A from  Ti group by Ti.A 
       having count(distinct Ti.B)>1

 

转载于:https://www.cnblogs.com/dyc0113/p/4159376.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值