select * from TabType where  TypeID in (select  distinct TypeID from TabEquip)---------

解决方案 »

  1.   

    安装常理来说,主表记录删除,从表记录也要删除的(不管是否有明细记录),即级联删除了.
    你的要求则不同了.
    两个表一关联就可以得到你需要的东西.
    选择出有明细的主表记录:
    select zb.* from TabType zb,TabEquip cb where zb.TypeID=cb.TypeID
      

  2.   

    对于从表已经引用了的主表记录,则你要删除此主表纪录,oracle会抛出异常(注意,是在没有设置级联删除的情况下的)
    对于从表没有引用的主表记录,你可以删除此纪录
      

  3.   

    这个我知道,Oracle有没有能力不通过查表判断出一条记录有没有被引用?
      

  4.   

    先查一下TabType中未被引用的记录:
    select * from tabtype where  typeid not in (select typeid from tabequip);
    再:
    delete from tabtype where typeid not in (select typeid from tabequip);
    如果对了,再commit;
    如果不对,再rollback;
      

  5.   

    你建立一个View
    create or replace view view_name is
    ( select  distinct TypeID from TabEquip
      union all
      select  distinct TypeID from ...
      ...
    );
    删除时
    delete from TabType a where not exists ( select 1 from view_name b where a.typeid=b.typeid)