2017-02-10 105 views
1

我有表table1和表2 这里是select语句。SQL更新查询更新2个表中的一列

SELECT table1_column1, table1_column2, table1_column3, table2_column1, 
     table2_column2, table2_column3 
FROM table1 
    , table2 
WHERE table1_column1 = table2_column1 
    AND table1_column2 = 'A' 
    AND table1_column3 <> table2_column3 

我得到结果,其中table1_column3和table2_column3具有不同的值。哪个是对的。

我想更新并用table1_column3替换table2_column3的所有值 我的更新sql语句给我ORA-00936:缺少表达式错误。

+5

那么你的'UPDATE'语句是什么? –

+0

你是什么意思“更新所有**的table2_column3值”?该查询仅适用于'table1_column2 ='A'' - 行'table1中至少有一行对应**'table2'中的每个**行吗? – mathguy

回答

2

每当你必须更新(或插入)的基础上值从另一个表的表,可以考虑使用merge声明,而不是update/insert

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606

在你的情况,你似乎在试图做这样的:相反,如果你想与update语句来做到这一点

merge into table2 t2 
    using table1 t1 
    on (t1.column1 = t2.column1 and t1.column2 = 'A') 
when matched then update set column3 = t1.column3 
    where column3 != t1.column3 
; 

,这可能会帮助:

Update with joins