mysql怎么求差集?
mysql如何查询两个字段数不同的表中数据不一致的记录
一般可用NOT EXISTS(非存在子句)或 LEFT JOIN左(右)连接后所产生空字段值来筛选两表的差集
classinfo表

student表

1、NOT EXISTS
not exists在比对字段有可利用的索引时,其运行效率是非常高,但是如果没有索引的情况下运行在大数据表时,其运行效率极差,这时应避免使用它
SELECT
*
FROM
student a
WHERE
NOT EXISTS (SELECT 1 FROM classinfo b WHERE a.classid = b.classid);

2、LEFT JOIN
用左(右)连接来求差集,由于需要实施两表连接会导致笛卡尔效应其输出集的记录行可能会增多,
若果不是一对一或一对多,我们应该将多对多的情况处理成多对一后才进行连接,否则输出的记录集可能不正确
SELECT
a.*
FROM
student a
LEFT JOIN classinfo b ON a.classid = b.classid
WHERE
b.classid IS NULL;
求差集的两种方法,有索引可利用时,not exists的效率要高于left join,反之left join效率更
本文对比了MySQL中使用NOT EXISTS和LEFT JOIN两种方法求取classinfo和student表中数据不一致的记录。NOT EXISTS在有索引时效率高,但大数据表下慎用;LEFT JOIN通过连接处理一对一或多对一情况,处理不当可能导致结果错误。

862

被折叠的 条评论
为什么被折叠?



