mysql 判断两列相等_如何判断mysql中数据表中两个列之间的相同记录和不同记录...

问题的描述如下:给定数据库中的两列,每个列内的所有记录可以视为一个集合,如何求这两个集合的交集,差集等。示例:

table1中字段firstname

tom

kevin

john

steven

marry

anthony

table2中字段username

jack

tom

william

tom

marry

Thomas

两个列的交集是tom, marry。解决的方法是采用union和group by:

SELECT name

FROM (SELECT firstname as name FROM table1 union SELECT username as name FROM table2) as alltable

group by name havingcount(*) > 1;

两个列的交集的补集:

SELECT name

FROM (SELECT firstname as name FROM table1 unionSELECT username as name FROM table2) as alltable

group by name havingcount(*) = 1;

第一个列和第二个列的差集:

SELECT * FROM table1

WHERE firstname not in

(SELECT name

FROM (SELECT firstname as name FROM table1 unionSELECT username as name FROM table2) as alltable

group by name havingcount(*) > 1)

类似的可以求第二个列和第一个列的差集。如果一个集合是另一个集合的子集,情况会简单一点。如果希望包含重复的记录,使用union all.

大家可以自己考虑一下。当然这个肯定不是唯一的解决方法了,就算抛砖引玉了。

参考:http://www.mysqltutorial.org/compare-two-tables-to-find-unmatched-records-mysql.aspx

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值