SQL更新,如何将table2值插入table1

时间:2016-02-09 05:52:31

标签: sql join db2-400

假设table1为a,table2为b,它们都在不同的结构中,但是有相同的字段称为branch,我想将table2.branch插入table1.branch

我已经尝试过了:

update a                                  
set a.branch = b.branch                   
from table1 a                              
inner join table2 b                        
on a.table1id = b.table2id                    
where (b.asd = '1' or b.asd = '3')  
and b.branch <> a.branch   

Err Msg“列限定符或表B未定义。”

和这个

update table1 a join table2 b on a.id=b.id
set a.branch = b.branch
where a.something <> b.something 

弹出column b not specified

我试过了两个,但没有人能做到。有没有人有建议如何更新SQL?

4 个答案:

答案 0 :(得分:1)

DB2 for i遵循不允许联接更新的SQL标准。有关$('#insertForm').on('click', function(){ var form_intitule = $('input[name=form_intitule]').val(); if($('input[name=form_intitule]').val().trim().length == 0){ alert('fill the blank'); } $.ajax({ type: "GET", url: "lib/function.php?insertForm="+insertForm+"&form_intitule="+form_intitule, dataType : "html", error: function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest + '--' + textStatus + '--' + errorThrown); }, success:function(data){ } }); });

支持的语法,请查看reference manual

这适用于大多数版本的DB2 for i

UPDATE

但是,上面的内容将使用table2中的相应值更新table1的每一行。如果table2中不存在某行,它将尝试使用NULL更新a.branch。如果a.branch不支持null,则会出错。有两种方法。

使用当前值

更新table1
update table1 a                                  
set a.branch = (select b.branch
                from table2 b
                where a.table1id = b.table2id
                  and b.asd = '1' or b.asd = '3'                   
               )

或者只更新table1中在table2中匹配的行

update table1 a                                  
set a.branch = coalesce((select b.branch
                from table2 b
                where a.table1id = b.table2id
                  and b.asd = '1' or b.asd = '3'                   
               ), a.branch)

如果您使用的是受支持的DB2 for i版本,则可以使用较新的MERGE语句。

update table1 a                                  
set a.branch = (select b.branch
                from table2 b
                where a.table1id = b.table2id
                  and b.asd = '1' or b.asd = '3'                   
               )
where exists (select * 
                from table2 b
               where a.table1id = b.table2id
                 and b.asd = '1' or b.asd = '3'                   
             )

答案 1 :(得分:0)

请尝试以下方法:

UPDATE table1
SET a.branch = b.branch
FROM table1 a
INNER JOIN table2 b
    ON a.id = b.id
WHERE a.something <> b.something

希望这有帮助。

答案 2 :(得分:0)

尝试

update table1 set branch = b.branch                   
from table1 a                              
inner join table2 b                        
on a.table1id = b.table2id                    
where (b.asd = '1' or b.asd = '3')  
and b.branch <> a.branch 

需要更新表对象不应使用别名

答案 3 :(得分:0)

您可以使用触发器,因此当插入table2.branch时,它会自动添加到table1.branch

希望这有帮助