UPDATE B SET bf1 = '0', bf2 = '0'
FROM A,B 
WHERE A.aid1 = B.bid1
AND A.aid2 = B.bid2 AND A.aid3 = B.bid3
AND B.bid1 = '0'DELETE FROM B
WHERE EXISTS
select * from A
where A.aid1 = B.bid1 AND A.aid2 = B.bid2 AND A.aid3 = B.bid3
and B.bid1 = '0'还有问题吗 

解决方案 »

  1.   

    DELETE FROM B
    WHERE 
    (select count(*) from A
    where A.aid1 = B.bid1 AND A.aid2 = B.bid2 AND A.aid3 = B.bid3
    and B.bid1 = '0') > 0
    也可以
      

  2.   

    DELETE FROM B
    WHERE 
    (select count(*) from A
    where A.aid1 = B.bid1 AND A.aid2 = B.bid2 AND A.aid3 = B.bid3
    and B.bid1 = '0') > 0
    也可以
      

  3.   

    主要是想知道在Oracle中两表连接(内连接、外连接等)的写法,因为好象Oracle中不能用inner join,不知道是不是这样?手边又一时找不到资料。
    zhiwen_huang(黄志文):你的写法中UPDATE到好理解,DELETE的写法总觉得怪怪的。
      

  4.   

    UPDATE B SET bf1 = '0', bf2 = '0'
     where B.bid1 = '0'
       and exists (select 'x' from a
                    where A.aid1 = B.bid1
                      AND A.aid2 = B.bid2
                      AND A.aid3 = B.bid3);delete from B
     where B.bid1 = '0'
       and exists (select 'x' from a
                    where A.aid1 = B.bid1
                      AND A.aid2 = B.bid2
                      AND A.aid3 = B.bid3);
      

  5.   

    UPDATE B SET bf1 = '0', bf2 = '0'
     where B.bid1 = '0'
       and exists (select 'x' from a
                    where A.aid1 = B.bid1
                      AND A.aid2 = B.bid2
                      AND A.aid3 = B.bid3);delete from B
     where B.bid1 = '0'
       and exists (select 'x' from a
                    where A.aid1 = B.bid1
                      AND A.aid2 = B.bid2
                      AND A.aid3 = B.bid3);
      

  6.   

    oracle中无论update还是delete后面只能跟一个表名,和其他表的连接必须通过where条件,最常用的是用exists,也可以用in,如:UPDATE B SET bf1 = '0', bf2 = '0'
     where B.bid1 = '0'
       and (bid1,bid2,bid3) in (select aid1,aid2,aid3 from a);
    但是执行效率应该是exists比较高。update ... from ...是非法的