MySQL如何实现两张表取差集
作者:搬运Gong 发布时间:2024-01-18 21:00:03
标签: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) 中没有匹配的行。
来源:https://blog.csdn.net/qq_20315217/article/details/123542011


猜你喜欢
- opencv中有多种色彩空间,包括 RGB、HSI、HSL、HSV、HSB、YCrCb、CIE XYZ、CIE Lab8种,使用中经常要遇到
- 改变图像中物体对象(像素)之间的空间关系。平移# 定义平移矩阵,需要是numpy的float32类型# x轴平移50,y轴平移80, 2*3
- 1.安装wkhtmltopdf下载地址:https://wkhtmltopdf.org/downloads.html我测试用的是window
- 目录一.准备工作二.预览1.启动2.运行3.结果三.设计思路四.源代码4.1 GUI.py4.2 Search_Apps.py五.总结一.准
- 假定业务:查看在职员工的薪资的第二名的员工信息创建数据库drop database if exists emps;create databa
- 用QQ聊过天的朋友都对它的自动隐藏窗口功能爱不释手,它可以使窗口显得清爽整洁而且富有动感,笔者的几个朋友都想在自己的网页中加入类似的东东,经
- 本文实例讲述了Python基于pygame实现的font游戏字体。分享给大家供大家参考,具体如下:在pygame游戏开发中,一个友好的UI中
- #/usr/bin/env/python#coding=utf-8import sys,re,time,osmaxdata = 50000
- 经常会看到这种弹出层背景变暗的效果,感觉手痒于是自己写了一个基于jquery的弹出层类。我习惯先写好结构和样式,然后再写js交互效果。结构定
- 本文实例讲述了Flask框架请求钩子与request请求对象。分享给大家供大家参考,具体如下:请求钩子在客户端和服务器交互的过程中,有些准备
- 一、遍历函数(map)map函数用于遍历序列,对序列中每个元素进行操作,最终获取新的序列。lis=[2,3,4,5]new_list=map
- 1.概述pyecharts 是百度开源的,适用于数据可视化的工具,配置灵活,展示图表相对美观,顺滑。2.安装python3环境下的安装:pi
- 什么是事件呢?按下键盘某个按键,鼠标移动,包括点击关闭按钮都可以算是事件操作。Pygame事件pygame.event.EventType&
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:<!DOCTYPE html><html lang="en&
- 题目描述原题链接 :496. 下一个更大元素 I - 力扣(LeetCode) (leetcode-cn.com)nums1 中数
- 一、前言最近总是和excel打交道,由于数据量较大,人工来修改某些数据可能会有点浪费时间,这时候就使用到了Python数据处理的神器—–Pa
- 1 前言前面的文章中我们已经获取到了基金的阶段变动信息和ETF信息的获取,那么在本章中,我们将继续前面的内容,获取基金的价格信息,并且把之前
- 前言最近在写一个移动端的地图项目,也是首次完整的去了解百度地图api,这篇博客会手把手的教你如何使用百度地图api和一些常见问题,后续我也会
- 开始刷leetcode算法题 今天做的是“买卖股票的最佳时机”题目要求 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计
- pandas中的agg函数python中的agg函数通常用于调用groupby()函数之后,对数据做一些聚合操作,包括sum,min,max