记得我刚入门SQL的时候老师和书上都说left join做外连接就是左边的表的数量就是查询结果的数量,其实这是不对的。今天突然想起一定要提向大家。我知道老师是为了让学生快些入门,因为这句话只考虑了右表没有与左表关联数据的情况但是如果右表有多条与左表关联的数据呢?所以查询结果应该是大于等于左表记录条数才对而不是等于。
下面用实例说明问题:
table A(用户信息)
UID USERNAME
------ ------------------
1 张三
2 李四
3 王五
table B(用户登录记录)
UID Time
------- -------------
2 2010-10-28 13:58:40
2 2010-10-28 13:58:48
2 2010-10-28 13:58:54
3 2010-10-28 13:58:59
3 2010-10-28 13:59:05
select A.*,B.Time from A left join B
一共是6条记录
UID USERNAME Time
------ ------------------ ------------
1 张三 NULL
2 李四 2010-10-28 13:58:40
2 李四 2010-10-28 13:58:48
2 李四 2010-10-28 13:58:54
3 王五 2010-10-28 13:58:59
3 王五 2010-10-28 13:59:05
当右表没有记录的时候用null和左表匹配,当右表有记录而且是多条记录的时候左表记录要重复以匹配右表的记录。其实这样是有用的自己想想看哦。