如何基于Oracle SQL语法中的其他表更新列的值

时间:2016-09-10 16:18:23

标签: sql oracle

我有一个包含这些列的emp

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(“GAURAV”。“T_EMP”。“LAST_NAME”)

insert into t_emp(dept_id)
    select dept_id 
    from emp;

如何根据t_emp表在emp表中执行此单列更新?

1 个答案:

答案 0 :(得分: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来获取正确的信息。