请问 在Oracle中想删除条件在其他表中的数据,怎么做?
在SQL SERVER中有 DELETE AA FROM AA,BB WHERE AA.id=BB.id and BB.kbn = '1';但Oracle不支持;因为数据量大,不考虑Exists 和 In

解决方案 »

  1.   

    考虑将 AA.id=BB.id and BB.kbn = '1' 这个条件先标记到 AA 中,然后再执行删除……
      

  2.   

    Delete AA as A where A.ID=(Select Id from BB where kbn='1' and id=A.id )
      

  3.   

    --------------------------------------------------------------
    您好,我们是“2006中国杰出数据库工程师评选”活动组委会。
    您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
    http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选终选的30位数据库工程师将与您展开积极的互动。他们会为您的问题提供满意的答案,此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
    http://www.bestdba.cn/match_discussion3.aspx?pointid=475&pointid2=1&pointid3=5&pcount=stc非常感谢您对本次活动的支持!
    --------------------------------------------------------------
      

  4.   

    delete from aa where aa.ID=(select id from bb where kbn='1' and id=aa.id )
      

  5.   

    提这个问题主要是一个效率上的考虑,我的aa表有百万条记录,bb表记录也很多,开始用了Exists来做,执行时间很长,因为条件是嵌套的,所以,比较希望有不嵌套的语句来执行,尝试了试图,及cursor等方法,不知有没有效率更高的方法
      

  6.   

    写个程序块还是相当不错了:
    DECLAREBEGIN
      LOOP
        DELETE FROM AA
         WHERE AA.ID = (SELECT ID
                          FROM BB
                         WHERE KBN = '1'
                           AND ID = AA.ID)
           AND ROWNUM <= 10000;
        COMMIT;
        EXIT WHEN(SQL%ROWCOUNT = 0 OR SQL%ROWCOUNT < 10000);
      END LOOP;
    END;