A表有329条记录
B表有82条记录
select * from a left join b on a.id=b.id
这样查询出来会有332条记录left join不是左联吗?以左边为主.那这是以那门子为主呢?不知道是我理解有问题还是什么有问题,我要以a表为主.来查询那用哪个连接?

解决方案 »

  1.   

    是左联,LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。
      

  2.   


    左表有329条记录,但是连接时,如果右表中某个与左表连接列上有两条,那连接后就是两条.学生
    A
    B
    C
    学生,课程,成绩
    A  1  50
    A  2  80
    B  1  68
    B  2  79虽然成绩表中C学生没有成绩,但以学生表左连接,就会有5条记录,其中4条有成绩,一条没有.
      

  3.   

    Left Outer Join 运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。第二个输入中的非匹配行作为空值返回。如果 Argument 列内不存在任何联接谓词,则每行都是一个匹配行。Left Outer Join 是一个逻辑运算符。
      

  4.   

    329+3
    b table have 3 records "s id相同
      

  5.   

    当第二个(底端)输入中有匹配行时,Left Semi Join 运算符返回第一个(顶端)输入中的每行。如果 Argument 列内不存在任何联接谓词,则每行都是一个匹配行。Left Semi Join 是一个逻辑运算符。 
      

  6.   

    left join表示以左表为主,查询右表中所有和左表中关联条件相符的记录
    比如左表有1行记录,右表有3行记录,通过关联条件a.id=b.id,在b表中3条记录的id都和a表的id相等,那么查出来的记录数就是3行,
    所以你的查询表a表中有329行,但是查出来是332条记录,是因为在b表中有多行和a表的一行对应
      

  7.   

    当b表的id只有一笔与a表的id相同时,则只会出现一笔,
    当b表中id相同数量有两笔及以上的,则就会显示两笔及以上的数据了.
      

  8.   

    使用left join出现比A表多的记录,那是因为你A表和B表是一对多关系,也就是一条A表记录可能有多条B表记录对应。