ryid 相当于 jbxx.rid 的外键。
语句如下:
select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg
where jbxx.rid = xzjl.ryid or jbxx.rid = jc_zdlg.ryid结果都到50w条了,而且还没完。这样不行,应该怎样写了?望懂的哥们指教下。分奉上。

解决方案 »

  1.   

    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl
    where jbxx.rid = xzjl.ryid 
    union
    select yzdb.DA_JBXX jbxx,yzdb.JC_ZDLG jc_zdlg 
    where jbxx.rid = jc_zdlg.ryid 
      

  2.   

    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg
    where jbxx.rid = xzjl.ryid AND jbxx.rid = jc_zdlg.ryid把or改成AND
      

  3.   

    天..
    3个大表连接
    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg 
    where jbxx.rid = xzjl.ryid or jbxx.rid = jc_zdlg.ryid 
    相当于
    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg 
    where jbxx.rid = xzjl.ryid 
    union all
    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg 
    jbxx.rid = jc_zdlg.ryid 
    union上边的代码等价于jbxx和 xzjl通过条件连接后的结果再跟第三个表无条件连接的笛卡尔积
    下边的代码等价于jbxx和 jc_zdlg通过条件连接后的结果再跟第三个表无条件连接的笛卡尔积
    两个结果集加起来就更大了
    把and 改成or可以避免
    楼主看看表连接方面的资料
      

  4.   

    三个表,至少有两个and级的关联条件,而你给出的是or,形成了两次笛卡尔积
      

  5.   

    ......
    把or 改成and
    写错了
      

  6.   

    改为 and 就ok了,否则笛卡尔了
      

  7.   

    如果是用or的话那肯定会出来N条数据。
      

  8.   

    建议用union all
    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg
    where jbxx.rid = xzjl.ryid  
    union all
    select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg
    where jbxx.rid = jc_zdlg.ryid 
      

  9.   

    楼主多表连接的时候不能用or来做条件,不然笛卡尔积会量会N多的,建议select xzjl.rid,xzjl.ryid from yzdb.DA_JBXX jbxx,yzdb.JC_XZJL xzjl,yzdb.JC_ZDLG jc_zdlg 
    where jbxx.rid = xzjl.ryid or jbxx.rid = jc_zdlg.ryid 改成and
            select xzjl.rid, xzjl.ryid
              from yzdb.DA_JBXX jbxx, yzdb.JC_XZJL xzjl, yzdb.JC_ZDLG jc_zdlg
             where jbxx.rid = xzjl.ryid
               and jbxx.rid = jc_zdlg.ryid
    或者改成or用union 来连接
    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx, yzdb.JC_XZJL xzjl, yzdb.JC_ZDLG jc_zdlg
     where jbxx.rid = xzjl.ryid
    union all
    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx,
           yzdb.JC_XZJL xzjl,
           yzdb.JC_ZDLG jc_zdlg jbxx.rid = jc_zdlg.ryid
      

  10.   

    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx, yzdb.JC_XZJL xzjl, yzdb.JC_ZDLG jc_zdlg
     where jbxx.rid = xzjl.ryid
    union all
    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx,
           yzdb.JC_XZJL xzjl,
           yzdb.JC_ZDLG jc_zdlg jbxx.rid = jc_zdlg.ryid
    含重复记录
    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx, yzdb.JC_XZJL xzjl, yzdb.JC_ZDLG jc_zdlg
     where jbxx.rid = xzjl.ryid
    union 
    select xzjl.rid, xzjl.ryid
      from yzdb.DA_JBXX jbxx,
           yzdb.JC_XZJL xzjl,
           yzdb.JC_ZDLG jc_zdlg jbxx.rid = jc_zdlg.ryid
    可以去掉重复记录,这样应该好点