为什么
     select ids,names from a,b,c where a.id = b.a_id and b.id = c.b_id 可以查出来值
但是
    select ids,names from a,b,c,d,e where a.id = b.a_id and b.id = c.b_id 查不出来值我知道是由于后两个表没关联的关系,但是为什么?
请给我解释一下原理~谢谢~

解决方案 »

  1.   

    不会吧,是不是你自己弄错啦。
    第二个SQL查出的结果应该>=第一个SQL的
      

  2.   

    估计在两个窗口或者session中,而在能查出数据的窗口insert数据后没有commit数据导致的。
      

  3.   

    还有可能是表d和e中有个表是空的,什么都没有导致的。 null的处理在oracle中是很特别的。
      

  4.   

    两表的结果应该是一样的。ids,names最好用如a.ids,b.names进行标识,以防不同表中出现相同的字段。
      

  5.   

    恩,真是这个原因,那请问两位,如果有null的话,我怎么处理啊?不是这个原因,如果是早报错了!但还是谢谢你~
      

  6.   


    对,第二个SQL是能查出结果的,但太大时会出不来,尤其是两个
    假如按第一个是一条,d 5000条,e 5000条
    那5000*5000=25000000太大了,受不了
      

  7.   


    修改成下面的格式:
    SELECT IDS, NAMES
      FROM A, B, C, D, E
     WHERE A.ID = B.A_ID
       AND B.ID = C.B_ID
       AND A.ROWID = D.ROWID(+)
       AND A.ROWID = E.ROWID(+)
      

  8.   

    对不起,在select ids,names from a,b,c,d,e where a.id = b.a_id and b.id = c.b_id 这句中,
    因d,e两表由于没有用到,不仅sql冗余,而且容易挂机发生死锁,所以查不出来值。 
    它也不行:select ids,names from a,b,c,d where a.id = b.a_id and b.id = c.b_id; 
    所以sql的精确高效乃至良好的编程习惯的养成十分重要。
      

  9.   


    呵呵,我也不是太想这么写,因为条件是或者的关系
    后面有个 or (a.id = d.a_id ....)
      

  10.   

    那像我说的,后面有个or条件怎么办?
    a.id = b.a_id and ((b.id = c.b_id and a.id = c.a_id) or (a.id= d.a_id ...)
      

  11.   

    这么写啊,实在不行就用union吧,反正查询结果的字段是一样的