2016-09-10 30 views
1

我有一個emp表,這些列如何更新基礎上的Oracle SQL語法其他表中的列值

emp_id f_name  l_name  salary  dept_id 
---------------------------------------------------- 
100  Steven  King  24000  90 
101  Neena  Kochhar  17000  50 
102  Lex   De Haan  17000  90 
103  Alexander Hunold  9000  60 

現在我有t_emp表,這些列:

f_name  l_name  salary  dept_id 
------------------------------------------- 
Steven  King  24000  null 
Neena  Kochhar  17000  null 
Lex   De Haan  17000  null 
Alexander Hunold  9000  null 

假設最近在這裏添加了dept_id列。我想更新t_emp.dept_id列與emp.dept_id列相同。 我怎麼能這樣做?

當我嘗試下面insert into查詢時,收到錯誤消息:

不能插入NULL到( 「高拉夫」 「T_EMP」 「LAST_NAME」。)

insert into t_emp(dept_id) 
    select dept_id 
    from emp; 

怎麼可能我在t_emp表中根據emp表做這個單列更新嗎?

+0

'INSERT'創建新行。如果你想更新現有的行,使用'UPDATE'(或可能'MERGE') –

回答

1

假設姓氏和名字提供表之間的匹配,那麼你可以使用相關子查詢是這樣的:

update t_emp te 
    set dept_id = (select e.dept_id 
        from emp e 
        where e.f_name = te.f_name and e.l_name = te.l_name 
       ); 

可以在如加salary等價,如果這是非常重要的。

請注意,實際存儲列並不重要。你可以使用join獲取信息:

select . . ., e.dept_id 
from t_emp te join 
    emp e 
    on e.f_name = te.f_name and e.l_name = te.l_name; 

它通常是更好的這樣的信息在一個地方保存和使用join s到得到正確的信息。

相關問題