SQL> desc gmgh;
 名称                                   
 ------------------------------------
 ACCOUNTNAME                            
 SUBSIDIARYID  SQL> desc country_business_servicecode
 名称                                           
 -----------------------------------------------
 EXCHANGENO                                     
 HUNDRUD                                        
 SERVICEID                                      
 ACCOUNTNUM   SQL> delete country_business_servicecode where accountnum in (select accountnum from gmgh where subsidiaryid=1);
已删除98965行gmgh中没有accountnum 这个字段,应该报错才对啊,可是现在却把整张表里的记录都给删了,怎么会这样呢?

解决方案 »

  1.   

    对于此条件where accountnum in (select accountnum from gmgh where subsidiaryid=1);
    永远是真.
      

  2.   

    此条件where accountnum in (select accountnum from gmgh where subsidiaryid=1);
    永远是真?怎么讲?
      

  3.   

    accountnum字段是来自表country_business_servicecode的,如果表gmgh中存在一条记录满足subsidiaryid=1,那么你这句话就相当于:delete country_business_servicecode where accountnum = accountnum
      

  4.   

    实际上Oracle在做SQL语法分析时in (select accountnum from gmgh where subsidiaryid=1)中accountnum字段分析为来自表country_business_servicecode的,
    只要表gmgh中存在一条记录满足subsidiaryid=1,那么你这句话就相当于:delete country_business_servicecode