表Rsda:
工号(Gh)  姓名(Xm) 基本工资(Jbgz)  职务(zw)   部门(bm)
101       张三      800            aaa          bbb   
102       李四      600            ccc          ddd 
此时对应的工资表Gzb:
工号(Gh)  姓名(Xm) 基本工资(Jbgz)  浮动工资(fd)  实发工资(sf)
101       张三      800            22             
102       李四      600            10           
---------------------------------------------------------------------------
后在Rsda中又增加一条新记录
201       王五       1000          aaa          asdf  
且删除102,李四的记录 
--------------------------------------------------------------------------
求一条SQL语句使工资表GZB中为:
工号(Gh)  姓名(Xm) 基本工资(Jbgz)  浮动工资(fd)  实发工资(sf)
101       张三      800            22             
201       王五      1000

解决方案 »

  1.   

    实际上这些东西应当使用Triger来做就比较好一点。针对Rsda做三个触发器,分别针对增加,修改和删除,这样只要你对Trigger做了以上三种操作,就执行触发器来对Gzb来进行操作了。如果使用程序的话从逻辑上不是非常清晰了。
    如果直接使用程序来实现的话,则应当分成两个部分,一个部分是删除操作,即删除102的时候的操作,执行语句如下:
    Delete From GZB where GH=102
    对于新添加,则执行如下语句:
    Insert into GZB(GH,XM,Jbgz) select GH,XM,Jbgz from Rsda where id=201
      

  2.   

    update GZB set Gh=201,Xm='王五',Jbgz=1000 where Gh=102
      

  3.   

    to yrj1210():
       我这是举个例子,不一定是具体针对“王五”的操作,可能rsda变化很多,但希望能用种方法使工资表(gzb)与rsda记录相对应。
       不知各位大虾有没有更好的方法???
      

  4.   

    在Rsda表中创三个触发器:
      create trigger insert_wage on Rsda
          for insert
       begin
          Insert into GZB(GH,XM,Jbgz) 
          select GH,XM,Jbgz 
                 from Rsda where Gh=(select Gh from inserted)
       end
      creaet trigger del_wage on Rsda
          for delete 
       begin
          delete from GZB where GH=(select GH from deleted)
       end
      
      create trigger update_wage on Rsda
          for update
       begin
          update Jbgz=(select Jbgz from inserted 
                        where GH=(select Gh=select Gh from deleted))
       end如果使用的是缓存更新的话,那就声明一个游标。
      

  5.   

    使用参照完整性只能对于主键和外键之间,
    当然可以不要gzb中的jbgz一字段,操作时直接使用rsda中的
    基本工资。前提是,两表必须建立主外键关联。
      

  6.   

    不会使用触发器,谁能定个先删除,再插入的SQL语句呢,100分立即送上!!
      

  7.   

    不论如何,这个功能用一条SQL 语句是没法实现的。
    如果是多条的话那你还要问吗?就是用triger 的话,如果执行的顺序是delete 后再insert 的
    话那也的用上二条语句才能实现的。如果用triger 的话可以用一条update 也是可以的。