MySQL如何实现两张表取差集

 更新时间:2023年02月07日 09:50:38   作者:搬运Gong  
这篇文章主要介绍了MySQL如何实现两张表取差集问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

MySQL两张表取差集

业务场景如下:

人员表中有证件号、手机号字段,这两个字段因为涉及到个人隐私问题,因此加密存储,有另外一张解密表可以和人员表进行关联,查出解密后的证件号和手机号,现在需要统计出人员表中有多少没有加密的数据,进行再次加密处理,这个时候,考虑到的就是求两张表的差集,来找出未加密的人员。

求差集 SQL 脚本

select p.* from persons p
left join CERT_CNO_PNO_TAB c ON c.PERSON_BUSINESS_ID = p.id
where p.`status` = 'person.status.allow.yes' and p.del_flag = '0'
and c.id is null;

注意看,where 语句的最后一个条件。通过 left join 连表之后,再使用右表的 c.id is null 来进行过滤,最终可以得到 person 表与 CERT_CNO_PNO_TAB 表中的差集。

结果如下:

我们来验证一下,看看求得的这个差集,在解密表中是否真的不存在。

select * from CERT_CNO_PNO_TAB where PERSON_BUSINESS_ID = '0f551c3e03e34e449e5b2e31b64efdc5';

结果如下:

可以看出,通过 left join 再加上 右表的条件过滤取的的差集,是正确的。

这种求差集的效率,远比 not in 、not exist 要快的多,小伙伴们可以尝试一下!

MySQL查两个表之间的数据差集

需要查两个表之间的差集

首先,想到的是主键直接not in

select mailbox_id from co_user where mailbox_id not in (select mailbox_id from core_mailbox);

好吧!这个是可以,但是数据多了的话,想到这个查询的逻辑有点受不住

于是再改为下面的这样:

select cu.mailbox_id,cm.mailbox_id from co_user as cu 
    left join core_mailbox as cm 
      on cu.mailbox_id = cm.mailbox_id 
        where cm.mailbox_id is NULL;

利用了left join的,然后进行对比,并且利用where进行筛选。

后面也在网上找了这条:

SELECT mailbox_id FROM `co_user` left join 
(select mailbox_id as i from core_mailbox) as t1
on co_user.mailbox_id= t1.i where t1.i is NULL;

概念上与第二条同理。

好吧! 回顾了一下left join

SQL LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • phpstudy中mysql无法启动(与本地安装的mysql冲突)的解决方式

    phpstudy中mysql无法启动(与本地安装的mysql冲突)的解决方式

    这篇文章主要给大家介绍了关于phpstudy中mysql无法启动(与本地安装的mysql冲突)的解决方式,文中通过图文将解决的方法介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • MySql优化之InnoDB,4GB内存,多查询的my.ini中文配置方案详解

    MySql优化之InnoDB,4GB内存,多查询的my.ini中文配置方案详解

    本文是一个针对 4G 内存系统(主要运行只有 InnoDB 表的 MySQL 并使用几个连接数执行复杂的查询)的MySQL配置文件方案
    2018-03-03
  • MySQL视图的概念、创建、查看、删除和修改详解

    MySQL视图的概念、创建、查看、删除和修改详解

    视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义,下面这篇文章主要给大家介绍了关于MySQL视图的概念、创建、查看、删除和修改的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • MYSQL8如何快速修改root密码

    MYSQL8如何快速修改root密码

    MySQL8的改密码跟MySQL5不同,很多朋友都遇到过这个问题,今天小编给大家讲解下MYSQL8如何快速修改root密码,需要的朋友可以参考下
    2023-05-05
  • 基于MySQL和Redis扣减库存的实践

    基于MySQL和Redis扣减库存的实践

    本文主要介绍了基于MySQL和Redis扣减库存的实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • mysql 8.0.17 安装与使用教程图解

    mysql 8.0.17 安装与使用教程图解

    这篇文章主要介绍了mysql 8.0.17 安装与使用教程图解,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • MySQL表的增删查改及聚合函数/group by子句的使用方法举例

    MySQL表的增删查改及聚合函数/group by子句的使用方法举例

    这篇文章主要给大家介绍了关于MySQL表的增删查改及聚合函数/group by子句的使用方法,在MySQL中可以使用聚合函数与GROUP BY语句可以对数据进行分组并进行聚合计算,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-01-01
  • MySQL数据库必备之条件查询语句

    MySQL数据库必备之条件查询语句

    当用户查看表格的大量数据是,由于数据量过于巨大会导致很难获取到需要的数据,在这时,就需要一个方法,一个可以通过用户输入获取到用户需要的数据并回填入表格,这就是条件查询的作用
    2021-10-10
  • MySQL数据库索引order by排序精讲

    MySQL数据库索引order by排序精讲

    我们今天说的并不是大数据下该如何优雅的排序,如何提升排序性能的问题,我们来仔细分析说一说MySQL中的排序问题,希望可以对正在阅读的同学们有所启迪帮助
    2021-11-11
  • Mysql中的自连接问题

    Mysql中的自连接问题

    这篇文章主要介绍了Mysql中的自连接问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05

最新评论