如何更新多个列,同时在表中的行之间进行比较

时间:2017-08-25 14:36:46

标签: sql oracle

我有一张桌子说

表1

id | rel_id

123 | 456

789 | 321

所以表1中的id列=表2中的id,并且会有catgy 180

来自表1的

rel_id列=来自表2的id,并且将具有catgy 181

        table 2

id |猫咪| spl_1 | spl_2 | spl_3 | spl 4

123 | 180 | 6 | 0 | 0 | 7

456 | 181 | 7 | 0 | 0 | 0

789 | 180 | 8 | 9 | 9 | 0

321 | 181 | 9 | 0 | 0 | 0

所以我想coamapre spl_2,spl_3,spl_4为id 123,spl_1为id 456,如果相同则更新id 123 spl's为null(在这种情况下更新spl_4为null)

由于

2 个答案:

答案 0 :(得分:0)

您可以使用标准Update YourTable Set SPCLTY_2 = Case When SPCLTY_2 = SPCLTY_1 Then Null Else SPCLTY_2 End, SPCLTY_3 = Case When SPCLTY_3 = SPCLTY_1 Then Null Else SPCLTY_3 End, SPCLTY_4 = Case When SPCLTY_4 = SPCLTY_1 Then Null Else SPCLTY_4 End, SPCLTY_5 = Case When SPCLTY_5 = SPCLTY_1 Then Null Else SPCLTY_5 End 表达式:

$.ajax({
    url: "something",
    success: function(data) {
        //let data.name = "Bob"
        div.append("<input value='data.name'>");
    }
});

答案 1 :(得分:0)

当您需要根据另一个表(或同一个表中的值或连接的结果等)更新一个表中的值时 - 来自另一个关系 *将是最常见的在配方中,使用MERGE语句通常最简单。这是一个很好的例子。

  

* 关系是一个奇特的术语表或类似的东西   一个,例如连接的结果,聚合操作,或者真的   任何类型的SELECT陈述。

merge into table_2 t2
  using
    ( select t1.id, s.spl_1
      from   table_1 t1 join table_2 s on t1.rel_id = s.id
    ) x
    on ( x.id = t2.id )
  when matched then update
    set t2.spl_2 = case when t2.spl_2 = x.spl_1 then null else t2.spl_2 end,
        t2.spl_3 = case when t2.spl_3 = x.spl_1 then null else t2.spl_3 end,
        t2.spl_4 = case when t2.spl_4 = x.spl_1 then null else t2.spl_4 end
    where x.spl_1 in (t2.spl_2, t2.spl_3, t2.spl_4)  
       -- WHERE clause so that you only update rows that need to be updated!
;

2 rows merged.

select * from table_2;

        ID      CATGY      SPL_1      SPL_2      SPL_3      SPL_4
---------- ---------- ---------- ---------- ---------- ----------
       123        180          6          0          0           
       456        181          7          0          0          0
       789        180          8                                0
       321        181          9          0          0          0