SELECT *   FROM t_crkd a, t_crkdmx b, t_kf c, t_kcz d, t_wldy e
  WHERE a.crkdid = b.crkdid
    AND a.kfid = c.kfid
   AND b.wlid = e.wlid
    AND a.kfid = d.kfid
    AND b.wlid = d.wlid
 
 SELECT *   FROM t_crkd a, t_crkdmx b, t_kf c, t_kcz d, t_wldy e
  WHERE a.crkdid = b.crkdid
    AND a.kfid = c.kfid
    AND b.wlid = e.wlid
    AND (   (a.kfid IN (SELECT kfid
                          FROM t_kcz) AND b.wlid NOT IN (SELECT wlid
                                                           FROM t_kcz
                                                          WHERE kfid = a.kfid))
         OR (a.kfid NOT IN (SELECT kfid
                             FROM t_kcz))请问下上面两个句子为什么查询出来的结果会有重复的语句啊?有没什么方法把两个句子用一个句子给查出来,用UNION直接相连速度太慢了,我要优化它,谢谢

解决方案 »

  1.   

    补充一下,查询出来的结果跟第二张表的结果是相同的,第二张表主键是ID,不是crkdid,第四张表里面有两个主键,分别是wlid和kfid  
      

  2.   

    SELECT   *       
    FROM   t_crkd   a,   
           t_crkdmx   b,   
           t_kf   c,   
           t_kcz   d,   
           t_wldy   e,(SELECT   kfid FROM   t_kcz)as f
           (SELECT   wlid FROM   t_kcz WHERE   kfid   =   a.kfid) as g
           (SELECT   kfid  FROM   t_kcz) as h
    where  a.kfid = f.kfid
    and    b.wlid<>g.wlid
    and    a.kfid <>h.kfid
    AND   a.kfid   =   c.kfid
    AND   b.wlid   =   e.wlid
    AND   a.kfid   =   d.kfid
    AND   b.wlid   =   d.wlid 用内联视图比子查询好点
                                                                                                                              
                                                                                                                    
      

  3.   

    按LS的试试;
    再把from后面的表按照资料大小从小到大排列试试,看看速度快点没