有两个表 A,B.B数据表中有一个外键字段FK_A,这是A表主键,两表通过这个外键关联.现在知道A表某一个记录的主键(ID)是X,要求删除与之关联的B表中的数据.我是这么写的DELETE B.* FROM A, B WHERE A.ID = X and B.FK_A = A.ID但是这个写法在Access中认为是错误的,于是用下面的写法:DELETE FROM B WHERE B.FK_A in (SELECT A.ID FROM A WHERE A.ID = X)想问一下大家,还有别的好一点的写法么?我觉的第二个写法自己都很难接受.另外
这只是2个表的关联,实际上这样的关联可能有很多级.比如:A关联B,B关联C...N关联N+1,然后知道A表某一个记录的ID,要求删除
N+1表的与之关联的数据.

解决方案 »

  1.   

    Delete from B where FK_A = X;
    delete from A where ID = X;
    commit;
      

  2.   

    DELETE   FROM   B   WHERE   FK_A   =   X 
      

  3.   

    如果关联的数据表有多级呢?比如5,6等等,这个SQL怎么写?
      

  4.   

    To   5 楼问的就是SQL语句怎么写啊。次序上当然是从最底下的那层删,那么这删的语句怎么写呢?
      

  5.   


    begin transaction
    /*删除相关引用*/
    delete from Top_User_CK where uid=@UID
    delete from Top_User_QX where uid=@UID
    delete from Top_User_QX_KW where uid=@UID
    delete from Top_User_QX_Cust where uid=@UIDdelete from top_user where uid=@UID if @@error=0
       begin
          commit transaction
          return 0
       end
     else 
       begin
          rollback transaction
          return -1
       end就像这样
      

  6.   

    To 10 楼
    你可能没有理解我的问题,再说一下A表和B表关联,B中有A的外键FK_A
    B表和C表关联,C中有B的外键FK_B

    N表和N+1表关联,N+1中有N的外键FK_N现在知道A中某一个记录的主键X,要求删除N+1表中的数据
    目前我的办法如下:DELETE FROM N+1 WHERE N+1.ID IN 
        (SELECT N+1.ID FROM A,B,...,N+1
            WHERE A.ID = X AND A.ID = B.FK_A AND B.ID = C.FK_B AND ... AND N.ID = N+1.FK_N)但是我觉得这个写法不太好,也不知道这么多的关联效率如何,所以想问一下有没有别的做法?
      

  7.   

    Access不支持关联删除,这是限制。
      

  8.   

    Access使用的是Jet-SQL,SQL Server使用的是T-SQL,两者用法上相差很大。
    JET SQL 帮助(jet4 access2000)下载地址http://www.access911.net/index.asp?board=8&recordid=75FAB71E&tt=
      

  9.   

    如果不支持,那么如何关联删除?比如A表中有N个字段X1,X2,Xn,B表中有3个字段,X1,X2,Y,
    删除A表中所有a.X1=B.X1 and a.X2=b.X2的纪录,如何作?
      

  10.   

    可以这样写: 
     DELETE B FROM A, B WHERE A.ID = X and B.FK_A = A.ID 
    试试!
    有问题在CSDN上给我留言..