1.select gather_time,place_code,un1,un,na,place_name from b_check 
2.left join (select unit_name as un1,unit_code from b_unit) c on b_check.unit_code_bm=c.unit_code  
3.left join (select unit_name as un,unit_code from b_unit) a on b_check.unit_code_bz=a.unit_code 
4.left join b_place on b_check.PLACE_CODE=b_place.PLACE_CODE 
5.left join (select user_name as na,user_code as uc from b_user) d on b_check.gather_user_code=d.uc;
句子有点乱, 只执行前面3句 查出的结果是35行,可是加上第四句 查询结果变成70行了 ,再加上后面那句则有100+行, 不是左连接行数不会变吗,b_check表中的数据时35条,为什么会查询结果行数会增加 请大虾们赐教啊

解决方案 »

  1.   

    我想是不是因为oracle不能判定左关联的顺序导致,所以先把上面的做关联后,然后在把上面做为一个整体表,在和另一个表关联!试试啊!呵呵
      

  2.   

    从第二句起使用括号,((((leftjoin (select unit_name as un1,unit_code from b_unit) c on b_check.unit_code_bm=c.unit_code )left .........))))试试看呢
      

  3.   

    不是左连接行数不会变吗?哪里说的
    表连接结果就是一对一、一对多、多对多比如连接条件:on b_check.unit_code_bm=c.unit_code   
    如果c表的相同unit_code有多条记录
    就会产生多条记录所以left join的理解是行数要么保持不变(一对一)、要么增加(一对多)
      

  4.   

      c表 unit_code是主键,我只是想关联查出c表中unit_name字段的。
      

  5.   

    你Join 的字段每一行都不一样.所以会这样.
    再说,就算是一样,但是如果别的表中的字段不是主键,会有重复,也会出现多行记录,
    left join 的意思是把左面的表中的数据全显示出来,而没有说查询的结果的条数和主表一样多
      

  6.   

     这是正解,本来是不应该增加行的,但是这设计数据库表和初始化的人不专业,该设唯一的字段没设唯一,初始化插入了相同的数据,害我调sql调了一下午 
    谢谢你和其他回过贴的朋友
      

  7.   

     这是正解,本来是不应该增加行的,但是这设计数据库表和初始化的人不专业,该设唯一的字段没设唯一,初始化插入了相同的数据,害我调sql调了一下午 
    谢谢你和其他回过贴的朋友