在oracle中查询a表有3839条数据
b表有3974条数据
a.f=b.f关联时有3773条数据
a.f(+)=b.f关联时有3974条数据
a.f=b.f(+)关联时有3773条数据问题是a.f=b.f(+)为什么是3773条数据而不是3839条数据?如何关联才能保证取到a表的所有数据?解决问题者一定给分.

解决方案 »

  1.   

    a.f或者b.f值有没有为null的??
      

  2.   

    是啊,就算a.f为空也不会出现这种情况啊,看是不是count的那个字段有空值,或者受其他条件约束
      

  3.   

    刚刚计算了一下
    a               b
    3773     =     3773
    66              201即
    a,b可以严格关联的为3773条数据
    a中66条数据和b无法严格关联
    b中201条数据无法与a严格关联现在
    a.f=b.f      3773
    a.f(+)=b.f   3974
    a.f=b.f(+)   3773???<===应该是3839吧?我都要疯掉了!!!
      

  4.   

    刚才我把两个表的数据建立两个新表,新表的左右关联是正确的!而在老数据表中的关联是不正确的?大概是我where条件有问题,我先看一下,有问题再向大家讨教.
      

  5.   

    问题是出在where条件上,我用的是
    where a.f=b.f(+)
    and b.xx=....
    的形势,结果关联后的完整数据被过滤了一部分,而如果我用
    from a,
    (
    select *
    from b
    where b.xx=...
    ) c
    where  a.f=c.f(+)
    就不会被过滤.一个不小心结果折腾了半天.
    看来oracle是先做关联再过滤的,估计要先在内部过滤完了再关联比边关联边过滤要有效率些.谢谢大家帮忙,晚上结帐.
      

  6.   

    看到后面的where,我真想晕倒。
      

  7.   

    观察不仔细,oracle根本不会出现这种低级问题的