1. MySQL左外关联查询
LEFT OUTER JOIN 是以左表为基准去匹配右表的数据,若右表匹配不到,则右表字段为空。因此正常情况,查询结果数量是与左表数据量相等的。
SELECT COUNT(*) FROM `tb_a` LEFT OUTER JOIN `tb_b`
ON `tb_a`.`column_1` = `tb_b`.`column_2`;
2. 问题
但有时查询结果多于左表的数据量。原因是tb_a与tb_b是一对多的关系,一条a的数据匹配到了多条b的数据。
3. 解决
若两表是一对一的关系,需要清理tb_b中的脏数据。
查询方法:
SELECT * FROM `tb_b` WHERE `column_2` IN
(SELECT `column_2` FROM `tb_b` GROUP BY `column_2` HAVING COUNT(`column_2`) > 1);