有表table1,表table2两张,table1包含table2所有字段,例如:table1{field1,field2,field3,field4,id,requestid},table2{field1,field2,field3,field4,id} 现在我需要写一个sql,如果table1的id在table2中存在的时候,则table2的字段的值为table1.field1+table2.field1,table1.field2+table2.field2...若不存在,则在table2中插入一条新数据,值为table1相应的字段值   写的比较复杂,其实目的很简单,两张表,表一在表二中存在则执行update表二,否则insert入表二。 需要用sql解决,求大虾们帮帮,急!

解决方案 »

  1.   

    一个sql无法处理的吧。拆开写。
      

  2.   

    分两不分,一部分通过查询两个表都有的id,数据,进行Update.
    第二部分,查找table1中id,不存在于table2的数据,将结果作为数据insert into table2.
      

  3.   

    嗯,两部分肯定能做,我现在是想用一个SQL语句解决,2楼的理解很正确,我就是那个意思
      

  4.   

    可以这样来写,jdbc中的sql语句1为select * from table1得到recultset对象对应的rs1,sql语句2为select * from table2得到recultset对象对应的rs2,先遍历rs2把rs2中对应id字段的值全部存进一个数组中r2[]。然后在while(rs1.next()){}中运用if语句判断在不在数组中r2[]中,如果存在,你就可以用update语句了,不存在你就直接insert into。
    现在关键的是,怎样填对应的值进去,因为你已经得到了相应的id的值了。当id相同时即id在r2[]中存在时,你需要用"select * from table1 where id="+id;得到rs3,用"select * from table2 where id="+id得到rs4,这时你就可以取相应字段的值相加了。当不同时,很显然,你只需要用"select * from table1 where id="+id;得到rs3,然后去处相应字段的值insert 进去就好了。
      

  5.   

    为题在于你一个sql要实现insert\update,两个execute操作,不显示啊?如果可以我也期待学习下啊。
    一般也就是executeQuery出结果将结果同时insert\update进表格。
      

  6.   

    不可能一个就能解决的因为你要用到if语句来判断的,相同和不相同时肯定要分开做的,你想if本来就是至少两种情况对不对,而恰恰你也是两种情况。
      

  7.   

    不知道这样可不可以得到你想要的:CREATE PROCEDURE PROCE(
    @field1 INT,
    @field2 INT,
    @field3 INT,
    @field4 INT,
    @id INT
    )
    AS
    BEGIN

    IF EXISTS (SELECT ID FROM TABLE2 WHERE id = @id) 
    BEGIN
    UPDATE TABLE2 SET field1 = @field1 + field1, field2 = @field2 + field2, field3 = @field3 + field3, field4 = @field4 + field4
    WHERE id = @id
    END ELSE 
    INSERT INTO TABLE2 (field1, field2, field3, field4, id) 
    VALUES (@field1, @field2, @field3, @field4, @id)
    BEGIN

    END

    END
    GO
      

  8.   

    贴代码贴错了
    CREATE PROCEDURE PROCE(
    @field1 INT,
    @field2 INT,
    @field3 INT,
    @field4 INT,
    @id INT
    )
    AS
    BEGIN

    IF EXISTS (SELECT ID FROM TABLE2 WHERE id = @id) 
    BEGIN
    UPDATE TABLE2 SET field1 = @field1 + field1, field2 = @field2 + field2, field3 = @field3 + field3, field4 = @field4 + field4
    WHERE id = @id
    END ELSE 
    INSERT INTO TABLE2 (field1, field2, field3, field4, id) 
    VALUES (@field1, @field2, @field3, @field4, @id)
    BEGIN

    END

    END
    GO
      

  9.   

     不用存储过程不能实现么?我在SQL中可以同时执行update和insert么,如case when 1=1 then update... else insert...
      

  10.   


    这样我不知道怎么写了, 你可以先调用一个查找 id 是否在 table2 中的方法, 然后再判断是 update 还是insert 
      

  11.   

    没有仔细看,还是分开好些,
    有时候一条SQL语句不见得是好事