关于同一表中A列和B列,选取出A列值相同的B列的sql语句

       好久没写博客了,虽然在技术的道路上越走越远,但是还是得不定时更新一下,前段时间有人提出一个需求,要求在用户表中选取出电话号码相同的用户,也就是一个电话号码对应多个用户,这样这个号码就不真实了(PS:设计数据库的时候咋不考虑一下?),于是就开始纠结与这个问题,最后用最笨的方法选取出需要的数据,记录一下。

      

IDABCD
1a11abfdsa
2d12abcerdf
3b13affdsa
4m14atfda
5c11fdfdsa


如上表所示,我们假设B列为电话号码列,A列为用户编号列,那么可以看出,11号码对应了2个用户,a和c,所以,这里就需要选取出1和5列数据。

 

我的做法是:

首先选取出在记录中该号码所对应的记录数大于1的结果。(小于等于1的结果肯定不会存在重复的数据)


select B from (select B,count(B) cou from table group by B)  where cou >1


这样选取出有重复号码的B的值之后,选取出A,B不同的列。(避免同一个A,B值对应多条记录)


select distinct A,B from table where B in ( select B from (select B,count(B) cou from table group by B)  where cou >1) 


选取出不同的A,B列之和,由于可能存在A,B列对应多条数据的情况,所以需要进行再一次的过滤:

select B from (select B,count(*)  cou from (select distinct A,B from table where B in ( select B from (select B,count(B) cou from table group by B)  where cou >1) ) ) where cou>1


至此,就选取出了所有不真实的B列的数据,再在表中选取出包含选取出的B列的数据的不同的A,B列的值即可。


这个方法很麻烦,以后学了更多的sql之后希望能找到更好的解决方案。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值