问题:
在left join 的时候会出现查询结果比左表数据多的问题
原因:
应为左表的一个值,对应右表中一个以上的值,sql无法分辨,只能将所有匹配上的都现实在结果中
例:
a_table 表
Id | Name |
1 | huhu |
2 | lili |
3 | wuwu |
b_table表
Id | Dt | Zt |
1 | 回家 | 运行 |
1 | 空 | 异常 |
2 | 玩耍 | 运行 |
3 | 休息 | 运行 |
SELECT
a.id,
a.NAME,
b.dt
FROM
a_table a
LEFT JOIN
b_table b
ON
a.id = b.id;
结果:
1 | huhu | 回家 |
1 | huhu | 空 |
2 | lili | 玩耍 |
3 | wuwu | 休息 |
解决办法:
结可以根据b_table表中状态(zt)或者是其他能去重的字段先将b_table表去重
select id,dt,zt from b_talbe where zt = '运行';
Id | Dt | Zt |
1 | 回家 | 运行 |
2 | 玩耍 | 运行 |
3 | 休息 | 运行 |
在这样的结果下,再次运行上面的sql,就会变为正常
1 | huhu | 回家 |
2 | lili | 玩耍 |
3 | wuwu | 休息 |
结论:
使用left join 时,右边的表应中的数据要保持与左边只有一条数据对应/与左边的表无数据对应
换句话说,右边表数据应该少于左边表