跳到正文

MySQL求两表的差集(非交集)

2 分钟阅读 292 字 0 查看原文 →

mysql如何查询两个字段数不同的表中数据不一致的记录

一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)连接后所产生空字段值来筛选两表的差集

1、NOT EXISTS 

not exists在比对字段有可利用的索引时,其运行效率是非常高,但是如果没有索引的情况下运行在大数据表时,其运行效率极差,这时应避免使用它

SELECT * FROM smd_employee t1 WHERE NOT EXISTS ( SELECT 1 FROM asd_user_account t2 WHERE t2.u_phone = t1.employee_phone );

 2、LEFT JOIN

用左(右)连接来求差集,由于需要实施两表连接会导致笛卡尔效应其输出集的记录行可能会增多,

若果不是一对一或一对多,我们应该将多对多的情况处理成多对一后才进行连接,否则输出的记录集可能不正确。

SELECT a.* FROM smd_employee a LEFT JOIN asd_user_account b ON b.u_phone = a.employee_phone WHERE b.u_phone IS NULL;

 求差集的两种方法,有索引可利用时,not exists的效率要高于left join,反之left join效率更好

原文参考:https://zhidao.baidu.com/question/565882811554863764.html

相关文章

StepVerifier-步骤验证器及其使用方法

StepVerifier 描述 到目前为止,你对每个练习的解答都是通过将 Publisher 你定义的答案传递给一个测试用例来检查的 StepVerifier。 该工件中的此类 reactor-test 能够订阅任何 Publisher (例如,Flux Akka Stream 或 A 流……),然后断言一组关于该序列的用户定义期望。 如果触发的任何事件与当前预期不符,则会 StepVerifie...

学习如何创建 Mono 实例

学习如何创建 Mono 实例 Flux 描述 AMono<T>是一个响应式流 Publisher,还增强了许多可用于生成、转换、编排 Mono 序列的操作符。 它是最多 Flux 可以发出 1 个<T>元素的特例:Mono 要么有值(包含元素),要么为空(不包含元素),要么失败(错误)。 AMono<Void>可用于仅对完成信号感兴趣的情况(相当于 Reacti...

学习如何创建 Flux 实例

学习如何创建 Flux 实例 描述 AFlux<T>是一个响应式流Publisher,它增强了许多操作符,可用于生成、转换、编排 Flux 序列。 它可以发出 0 到n 个 <T>元素(onNext事件),然后完成或出错(onComplete以及onError终止事件)。如果没有触发终止事件,则循环Flux将无限进行。 Flux 上的静态工厂允许创建源,或从多个回调类型生成...

bigroc 头像
bigroc

热爱技术的开发者,持续分享 Java、JavaScript、Go、Docker、AI 等领域的编程经验和技术思考。

评论

滚动到评论区域时再加载第三方评论脚本。