我在数据库中进行七张表的关联查询,where后的条件有12个,其中很多表都不直接关联,现在查询不到我想要的数据,请问各位高手,当多张表进行关联的时候,应该注意哪些问题呢,where后的查询条件是不是有什么先后顺序???select 
                  GI.GUARANTYID as GUARANTYID,
                  GI.GUARANTYTYPE as GUARANTYTYPE,
              case 
                  when GI.GUARANTYTYPE like '2010%' then '020'
                  when GI.GUARANTYTYPE like '2020%' then '030'
                  when GI.GUARANTYTYPE like '1010%' then '040'
                  when GI.GUARANTYTYPE like '1020%' then '050'
                  else '070' end as CLASSIFY,
                  GI.CONFIRMVALUE as CONFIRMVALUE,
                  BD.BUSINESSTYPE as BUSINESSTYPE,
                  BD.SERIALNO as BUSINESSSERIALNO,
                  BD.BALANCE as BUSINESSBALANCE,
                  GC.SERIALNO as GUARANTYCONTRACTID,
                  '2011/09/20' as SESSIONID 
            from  BUSINESS_DUEBILL  BD,
                  BUSINESS_CONTRACT BC,
                  GUARANTY_CONTRACT GC,
                  lmt_tree_node LMT,
                  AGR_CRE_SEC_RELA AGR,
                  GUARANTY_INFO GI, GUARANTY_RELATIVE GR 
            where 
                 GI.guarantyId =GR.guarantyId 
                 and  GR.GCCONTRACTNO =GC.serialNo
                 and  GC.serialNo=BC.RELATIVESERIALNO
                 and  GC.serialNo= AGR.GUR_SERIALNO
                 and  BC.SERIALNO=BD.RelativeSerialNo2 
                 and  BC.SerialNo =AGR.SERIALNO
                 and  AGR.CREDITOBJTYPE = 'BusinessContract'
                 and  BC.relativelmtid=LMT.lmtid
                 and  GC.ContractStatus = '020'
   and BD.Balance >0
   and (GC.GUARANTYTYPE='050' or GC.GUARANTYTYPE='060')
                 and BD.InputDate = '2011/09/20'

解决方案 »

  1.   

    where后面是肯定没有顺序的.你这些where我也不知道是不是有空值,我随便猜一下,十二个判断里面只要有一个空值,那你就什么都得不到.这是oracle的特性.所以这种关联最好是使用外联,在等号后面要加上加号的.你把那些判断拆开,先试一个等号,再试两个等号,以此类推..外关联的判断是如下形式: where GI.guarantyId =GR.guarantyId(+)
      

  2.   

    对了!!!我忽然感觉你这条命令很有问题!!!我怀疑你这条命令从根本上就是个错误的命令!!!!我在多张表进行关联的时候,从不敢像你这么写命令!!如果我要多张表关联,首先是取出两张表的关联,然后把这张新表,作为C表,再去关联D表,然后这张表作为E表,再去关联F表,虽然麻烦点,但是可以保证关联不会出问题!!而你这条命令的关联,我从感觉上好象觉得是错误的呀!~~~~~~~~~~~~~
      

  3.   

    这样的关联查询会影响速度的,当你的数据多的时候会很慢!建议你可以说先用with aa as(select )查出满足部分条件的数据,然后在这个基础上在查询,这样看的也明了
      

  4.   


    with aa as(select )个方法没有使用过,能稍微详细点吗?举个简单的例子也可以。